diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39fabf865..41eaa9fc4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -263,13 +263,19 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6 with: go-version-file: go.mod - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 with: python-version: '3.x' + - name: Resolve CLI E2E domains + id: e2e_domains + run: node scripts/e2e_domains.js - name: Build lark-cli + if: ${{ steps.e2e_domains.outputs.mode != 'skip' }} run: make build - name: Run dry-run E2E tests env: @@ -277,7 +283,28 @@ jobs: LARKSUITE_CLI_APP_ID: dry-run LARKSUITE_CLI_APP_SECRET: dry-run LARKSUITE_CLI_BRAND: feishu - run: go test -v -count=1 -timeout=5m ./tests/cli_e2e/... -run 'DryRun|Regression' + E2E_MODE: ${{ steps.e2e_domains.outputs.mode }} + E2E_REASON: ${{ steps.e2e_domains.outputs.reason }} + E2E_DRY_ROOT_PACKAGE: ${{ steps.e2e_domains.outputs.dry_root_package }} + E2E_DRY_PACKAGES: ${{ steps.e2e_domains.outputs.dry_packages }} + run: | + if [ "$E2E_MODE" = "skip" ]; then + echo "No dry-run CLI E2E needed: $E2E_REASON" + exit 0 + fi + if [ -z "$E2E_DRY_ROOT_PACKAGE" ] && [ -z "$E2E_DRY_PACKAGES" ]; then + echo "::error::No dry-run CLI E2E packages resolved for mode $E2E_MODE" + exit 1 + fi + echo "Dry-run CLI E2E domains: $E2E_MODE ($E2E_REASON)" + if [ -n "$E2E_DRY_ROOT_PACKAGE" ]; then + echo "Dry-run CLI E2E root package: $E2E_DRY_ROOT_PACKAGE" + go test -v -count=1 -timeout=5m "$E2E_DRY_ROOT_PACKAGE" + fi + if [ -n "$E2E_DRY_PACKAGES" ]; then + echo "Dry-run CLI E2E packages: $E2E_DRY_PACKAGES" + go test -v -count=1 -timeout=5m $E2E_DRY_PACKAGES -run 'DryRun|Regression' + fi e2e-live: needs: [unit-test, lint, script-test, deterministic-gate] @@ -292,15 +319,22 @@ jobs: TEST_USER_ACCESS_TOKEN: ${{ secrets.TEST_USER_ACCESS_TOKEN }} steps: - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 + with: + fetch-depth: 0 - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6 with: go-version-file: go.mod - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 with: python-version: '3.x' + - name: Resolve CLI E2E domains + id: e2e_domains + run: node scripts/e2e_domains.js - name: Build lark-cli + if: ${{ steps.e2e_domains.outputs.mode != 'skip' }} run: make build - name: Configure bot credentials + if: ${{ steps.e2e_domains.outputs.mode != 'skip' }} run: | if [ -z "$TEST_BOT1_APP_ID" ] || [ -z "$TEST_BOT1_APP_SECRET" ]; then echo "::error::Missing required secrets: TEST_BOT1_APP_ID / TEST_BOT1_APP_SECRET" @@ -310,16 +344,24 @@ jobs: - name: Run CLI E2E tests env: LARK_CLI_BIN: ${{ github.workspace }}/lark-cli + E2E_MODE: ${{ steps.e2e_domains.outputs.mode }} + E2E_REASON: ${{ steps.e2e_domains.outputs.reason }} + E2E_LIVE_PACKAGES: ${{ steps.e2e_domains.outputs.live_packages }} run: | - packages=$(go list ./tests/cli_e2e/... | grep -v '^github.com/larksuite/cli/tests/cli_e2e$' | grep -v '/demo$') + if [ "$E2E_MODE" = "skip" ]; then + echo "No live CLI E2E needed: $E2E_REASON" + exit 0 + fi + packages="$E2E_LIVE_PACKAGES" if [ -z "$packages" ]; then - echo "No CLI E2E packages to test after exclusions." + echo "::error::No live CLI E2E packages resolved for mode $E2E_MODE" exit 1 fi - packages_arg=$(printf '%s\n' "$packages" | paste -sd' ' -) - go run gotest.tools/gotestsum@v1.12.3 --rerun-fails=2 --rerun-fails-max-failures=20 --packages="$packages_arg" --format testname --junitfile cli-e2e-report.xml -- -count=1 -v + echo "Live CLI E2E domains: $E2E_MODE ($E2E_REASON)" + echo "Live CLI E2E packages: $packages" + go run gotest.tools/gotestsum@v1.12.3 --rerun-fails=2 --rerun-fails-max-failures=20 --packages="$packages" --format testname --junitfile cli-e2e-report.xml -- -count=1 -v - name: Publish CLI E2E test report - if: ${{ !cancelled() }} + if: ${{ !cancelled() && steps.e2e_domains.outputs.mode != 'skip' }} uses: dorny/test-reporter@a43b3a5f7366b97d083190328d2c652e1a8b6aa2 # v3.0.0 with: name: CLI E2E Tests diff --git a/.gitignore b/.gitignore index 5666621b5..645848906 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,9 @@ Thumbs.db # Go docs/ref docs/ +!tests/cli_e2e/docs/ +!tests/cli_e2e/docs/*.go +!tests/cli_e2e/docs/*.md vendor/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 86b2f8923..5eebaf24e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,71 @@ All notable changes to this project will be documented in this file. +## [v1.0.66] - 2026-07-07 + +### Features + +- support semantic recurring calendar operations (#1723) +- minute wait (#1768) + +### Bug Fixes + +- guide drive import concurrency conflicts (#1751) +- **calendar**: guide approval room booking fallback (#1637) +- support pnpm global installs in self-update (#1705) +- resolve schema against runtime metadata in plugin builds; gate cache overlay by version (#1764) + +### Documentation + +- tighten doc creation validation workflow (#1759) +- clarify success envelope contract — judge success by ok, not code (#1730) + +### Refactoring + +- **envvars**: consolidate agent env value access (#1757) + +### Misc + +- Improve agent-facing error guidance for drive, markdown, and wiki (#1779) + +## [v1.0.65] - 2026-07-03 + +### Features + +- **doc**: Add `+history-list`, `+history-revert`, and `+history-revert-status` shortcuts for document version history (#1612) + +### Bug Fixes + +- **minutes**: `+speaker-replace` no longer refetches the speaker list — `--from-speaker-id` is passed through as-is (#1731) + +### Documentation + +- **drive**: Document 30-char query limit for `+search` (#1560) +- **doc**: Add mindnote guidance to lark-doc skill (#1581) +- **doc**: Sync lark-doc skill content from online-doc (#1701) + +## [v1.0.64] - 2026-07-02 + +### Features + +- **im**: Upgrade card send to Card 2.0 with full component reference (#1688) +- **im**: Add `+chat-members-list` shortcut for member listing (#1398) +- **okr**: Semi-plain text format with mention position preservation and `patch` shortcut (#1671) + +### Bug Fixes + +- **cli**: Point permission-apply link at official `/page/scope-apply` entry (#1722) +- **cli**: Improve secure label error handling (#1707) +- **cli**: Reduce public content token false positives +- **cli**: Increase npm registry fetch timeout to 15s during update check (#1724) +- **doc**: Align word statistics compound tokens (#1706) + +### Documentation + +- **approval**: Add detailed command-to-reference mapping for the approval skill (#1630) +- **doc**: Support `reference_map` in docs (#1690) +- **slides**: Refresh generation guidance — add constraints, drop template toolchain, and inline lint XML fixtures + ## [v1.0.62] - 2026-07-01 ### Features @@ -1333,6 +1398,9 @@ Bundled AI agent skills for intelligent assistance: - Bilingual documentation (English & Chinese). - CI/CD pipelines: linting, testing, coverage reporting, and automated releases. +[v1.0.66]: https://github.com/larksuite/cli/releases/tag/v1.0.66 +[v1.0.65]: https://github.com/larksuite/cli/releases/tag/v1.0.65 +[v1.0.64]: https://github.com/larksuite/cli/releases/tag/v1.0.64 [v1.0.62]: https://github.com/larksuite/cli/releases/tag/v1.0.62 [v1.0.61]: https://github.com/larksuite/cli/releases/tag/v1.0.61 [v1.0.60]: https://github.com/larksuite/cli/releases/tag/v1.0.60 diff --git a/Makefile b/Makefile index d401cd173..aad7eccf2 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ script-test: bash scripts/resolve-changed-from.test.sh bash scripts/ci-workflow.test.sh bash scripts/semantic-review-workflow.test.sh - $(NODE) --test scripts/semantic-review-verify-artifact.test.js scripts/pr-quality-summary.test.js scripts/semantic-review-publish.test.js scripts/ci-quality-summary-publish.test.js + $(NODE) --test scripts/e2e_domains.test.js scripts/semantic-review-verify-artifact.test.js scripts/pr-quality-summary.test.js scripts/semantic-review-publish.test.js scripts/ci-quality-summary-publish.test.js # ./extension/... keeps the public plugin SDK in the default test matrix. unit-test: fetch_meta diff --git a/README.md b/README.md index e0f371f6c..0d6fc24c2 100644 --- a/README.md +++ b/README.md @@ -233,6 +233,24 @@ lark-cli api POST /open-apis/im/v1/messages --params '{"receive_id_type":"chat_i --format csv # Comma-separated values ``` +### JSON Output Contract + +With `--format json` (the default), success and error envelopes are distinct. + +Success goes to **stdout**, exit code `0`: + +```json +{ "ok": true, "identity": "user", "data": { "guid": "..." }, "meta": { "count": 1 } } +``` + +Errors go to **stderr**, non-zero exit code: + +```json +{ "ok": false, "identity": "user", "error": { "type": "api", "subtype": "...", "code": 99991679, "message": "...", "hint": "..." } } +``` + +To check whether a command succeeded, test `ok == true` (or the exit code) — **not** `code == 0`. Unlike raw OpenAPI responses (`{"code": 0, "msg": "ok", ...}`), the success envelope carries no `code` or `msg` field; `code` appears only inside `error` as the upstream OpenAPI code. See [errs/ERROR_CONTRACT.md](errs/ERROR_CONTRACT.md) for the full error taxonomy. + ### Pagination ```bash diff --git a/README.zh.md b/README.zh.md index 6d8221f2a..74b706405 100644 --- a/README.zh.md +++ b/README.zh.md @@ -234,6 +234,24 @@ lark-cli api POST /open-apis/im/v1/messages --params '{"receive_id_type":"chat_i --format csv # 逗号分隔值 ``` +### JSON 输出契约 + +`--format json`(默认)下,成功与错误的信封结构不同。 + +成功信封写入 **stdout**,退出码 0: + +```json +{ "ok": true, "identity": "user", "data": { "guid": "..." }, "meta": { "count": 1 } } +``` + +错误信封写入 **stderr**,退出码非 0: + +```json +{ "ok": false, "identity": "user", "error": { "type": "api", "subtype": "...", "code": 99991679, "message": "...", "hint": "..." } } +``` + +判断命令是否成功,请检查 `ok == true`(或进程退出码),**不要用 `code == 0`**。与原始 OpenAPI 响应(`{"code": 0, "msg": "ok", ...}`)不同,成功信封没有 `code` 和 `msg` 字段;`code` 只出现在错误信封的 `error` 内,含义是上游 OpenAPI 的 numeric code。完整错误分类见 [errs/ERROR_CONTRACT.md](errs/ERROR_CONTRACT.md)。 + ### 分页 ```bash diff --git a/cmd/api/api_test.go b/cmd/api/api_test.go index 14d09aaae..1ea4c99f2 100644 --- a/cmd/api/api_test.go +++ b/cmd/api/api_test.go @@ -24,13 +24,28 @@ import ( "github.com/spf13/cobra" ) +func newTestApiCmd(f *cmdutil.Factory, runF func(*APIOptions) error) *cobra.Command { + cmd := NewCmdApi(f, runF) + cmd.SilenceErrors = true + cmd.SilenceUsage = true + return cmd +} + +func newTestRootCmd() *cobra.Command { + return &cobra.Command{ + Use: "lark-cli", + SilenceErrors: true, + SilenceUsage: true, + } +} + func TestApiCmd_FlagParsing(t *testing.T) { f, _, _, _ := cmdutil.TestFactory(t, &core.CliConfig{ AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) @@ -58,7 +73,7 @@ func TestApiCmd_DryRun(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot", "--dry-run"}) err := cmd.Execute() if err != nil { @@ -81,7 +96,7 @@ func TestApiCmd_NullParamsWithPageSize(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/test", "--params", "null", "--page-size", "50", "--as", "bot", "--dry-run"}) if err := cmd.Execute(); err != nil { t.Fatalf("--params null with --page-size should not error, got: %v", err) @@ -102,7 +117,7 @@ func TestApiCmd_BotMode(t *testing.T) { Body: map[string]interface{}{"code": 0, "msg": "ok", "data": map[string]interface{}{"result": "success"}}, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot"}) err := cmd.Execute() if err != nil { @@ -129,7 +144,7 @@ func TestApiCmd_MissingArgs(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET"}) // missing path err := cmd.Execute() if err == nil { @@ -142,7 +157,7 @@ func TestApiCmd_InvalidParamsJSON(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot", "--params", "{bad"}) err := cmd.Execute() if err == nil { @@ -155,7 +170,7 @@ func TestApiValidArgsFunction(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) fn := cmd.ValidArgsFunction tests := []struct { @@ -221,7 +236,7 @@ func TestNewCmdApi_StrictModeHidesAsFlag(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, SupportedIdentities: 2, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) flag := cmd.Flags().Lookup("as") if flag == nil { t.Fatal("expected --as flag to be registered") @@ -240,7 +255,7 @@ func TestApiCmd_PageLimitDefault(t *testing.T) { }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) @@ -259,7 +274,7 @@ func TestApiCmd_ParamsAndDataBothStdinConflict(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"POST", "/open-apis/test", "--as", "bot", "--params", "-", "--data", "-"}) err := cmd.Execute() if err == nil { @@ -276,7 +291,7 @@ func TestApiCmd_OutputAndPageAllConflict(t *testing.T) { }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return apiRun(opts) }) @@ -301,7 +316,7 @@ func TestApiCmd_BinaryResponse_AutoSave(t *testing.T) { ContentType: "application/octet-stream", }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/drive/v1/files/xxx/download", "--as", "bot"}) err := cmd.Execute() if err != nil { @@ -332,7 +347,7 @@ func TestApiCmd_PageAll_NonBatchAPI_FallbackToJSON(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/contact/v3/users/u123", "--as", "bot", "--page-all", "--format", "ndjson"}) err := cmd.Execute() if err != nil { @@ -372,7 +387,7 @@ func TestApiCmd_PageAll_NonBatchAPI_ErrorStillOutputsJSON(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/im/v1/chats/oc_xxx/announcement", "--as", "bot", "--page-all"}) err := cmd.Execute() // Should return an error @@ -413,7 +428,7 @@ func TestApiCmd_PageAll_BatchAPI_StreamsItems(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all", "--format", "ndjson"}) err := cmd.Execute() if err != nil { @@ -452,7 +467,7 @@ func TestApiCmd_PageAll_StreamBusinessErrorDoesNotDumpJSON(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all", "--format", "ndjson"}) err := cmd.Execute() if err == nil { @@ -487,7 +502,7 @@ func TestApiCmd_PageAll_BatchAPI_DefaultJSONEnvelope(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all"}) if err := cmd.Execute(); err != nil { t.Fatalf("unexpected error: %v", err) @@ -553,8 +568,8 @@ func TestApiCmd_PageAll_DefaultJSONRunsContentSafety(t *testing.T) { }, }) - root := &cobra.Command{Use: "lark-cli"} - root.AddCommand(NewCmdApi(f, nil)) + root := newTestRootCmd() + root.AddCommand(newTestApiCmd(f, nil)) root.SetArgs([]string{"api", "GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all"}) if err := root.Execute(); err != nil { t.Fatalf("unexpected error: %v", err) @@ -604,8 +619,8 @@ func TestApiCmd_PageAll_StreamFormatRunsContentSafety(t *testing.T) { }, }) - root := &cobra.Command{Use: "lark-cli"} - root.AddCommand(NewCmdApi(f, nil)) + root := newTestRootCmd() + root.AddCommand(newTestApiCmd(f, nil)) root.SetArgs([]string{"api", "GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all", "--format", "ndjson"}) if err := root.Execute(); err != nil { t.Fatalf("unexpected error: %v", err) @@ -660,8 +675,8 @@ func TestApiCmd_PageAll_StreamFormatBlockSkipsBlockedPage(t *testing.T) { }, }) - root := &cobra.Command{Use: "lark-cli"} - root.AddCommand(NewCmdApi(f, nil)) + root := newTestRootCmd() + root.AddCommand(newTestApiCmd(f, nil)) root.SetArgs([]string{"api", "GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all", "--format", "ndjson"}) err := root.Execute() if err == nil { @@ -725,7 +740,7 @@ func TestApiCmd_JqFlag_Parsing(t *testing.T) { }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) @@ -745,7 +760,7 @@ func TestApiCmd_JqFlag_ShortForm(t *testing.T) { }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) @@ -764,7 +779,7 @@ func TestApiCmd_JqAndOutputConflict(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { return apiRun(opts) }) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot", "--jq", ".data", "--output", "file.bin"}) @@ -795,7 +810,7 @@ func TestApiCmd_JqFilter_AppliesExpression(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/test/jq", "--as", "bot", "--jq", ".data.items[].name"}) err := cmd.Execute() if err != nil { @@ -816,7 +831,7 @@ func TestApiCmd_JqAndFormatConflict(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { return apiRun(opts) }) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot", "--jq", ".data", "--format", "ndjson"}) @@ -834,7 +849,7 @@ func TestApiCmd_JqInvalidExpression(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { return apiRun(opts) }) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot", "--jq", "invalid["}) @@ -863,7 +878,7 @@ func TestApiCmd_PageAll_WithJq(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/contact/v3/users", "--as", "bot", "--page-all", "--jq", ".data.items[].id"}) err := cmd.Execute() if err != nil { @@ -884,7 +899,7 @@ func TestApiCmd_MethodUppercase(t *testing.T) { }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) @@ -903,7 +918,7 @@ func TestApiCmd_FileFlagParsing(t *testing.T) { AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) @@ -921,7 +936,7 @@ func TestApiCmd_FileAndOutputConflict(t *testing.T) { f, _, _, _ := cmdutil.TestFactory(t, &core.CliConfig{ AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { return apiRun(opts) }) cmd.SetArgs([]string{"POST", "/open-apis/test", "--as", "bot", "--file", "photo.jpg", "--output", "out.json"}) @@ -938,7 +953,7 @@ func TestApiCmd_FileWithGET(t *testing.T) { f, _, _, _ := cmdutil.TestFactory(t, &core.CliConfig{ AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { return apiRun(opts) }) cmd.SetArgs([]string{"GET", "/open-apis/test", "--as", "bot", "--file", "photo.jpg"}) @@ -955,7 +970,7 @@ func TestApiCmd_FileStdinConflictWithData(t *testing.T) { f, _, _, _ := cmdutil.TestFactory(t, &core.CliConfig{ AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { return apiRun(opts) }) cmd.SetArgs([]string{"POST", "/open-apis/test", "--as", "bot", "--file", "-", "--data", "-"}) @@ -978,7 +993,7 @@ func TestApiCmd_DryRunWithFile(t *testing.T) { f, stdout, _, _ := cmdutil.TestFactory(t, &core.CliConfig{ AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"POST", "/open-apis/im/v1/images", "--file", "image=" + tmpFile, "--data", `{"image_type":"message"}`, "--dry-run", "--as", "bot"}) err := cmd.Execute() if err != nil { @@ -1019,7 +1034,7 @@ func TestApiCmd_PermissionError_DerivesFirstClassFields(t *testing.T) { }, }) - cmd := NewCmdApi(f, nil) + cmd := newTestApiCmd(f, nil) cmd.SetArgs([]string{"GET", "/open-apis/docx/v1/documents/test", "--as", "bot"}) err := cmd.Execute() if err == nil { @@ -1045,7 +1060,7 @@ func TestApiCmd_JsonFlag_Accepted(t *testing.T) { }) var gotOpts *APIOptions - cmd := NewCmdApi(f, func(opts *APIOptions) error { + cmd := newTestApiCmd(f, func(opts *APIOptions) error { gotOpts = opts return nil }) diff --git a/cmd/root_integration_test.go b/cmd/root_integration_test.go index d793db419..bfd1d126e 100644 --- a/cmd/root_integration_test.go +++ b/cmd/root_integration_test.go @@ -14,11 +14,13 @@ import ( "github.com/larksuite/cli/cmd/api" "github.com/larksuite/cli/cmd/auth" "github.com/larksuite/cli/cmd/service" + "github.com/larksuite/cli/internal/apicatalog" "github.com/larksuite/cli/internal/build" "github.com/larksuite/cli/internal/cmdutil" "github.com/larksuite/cli/internal/core" "github.com/larksuite/cli/internal/envvars" "github.com/larksuite/cli/internal/httpmock" + "github.com/larksuite/cli/internal/meta" "github.com/larksuite/cli/internal/output" "github.com/larksuite/cli/internal/skillscheck" "github.com/larksuite/cli/internal/update" @@ -103,6 +105,11 @@ func parseTypedEnvelope(t *testing.T, stderr *bytes.Buffer) typedErrorEnvelope { } func buildStrictModeIntegrationRootCmd(t *testing.T, f *cmdutil.Factory) *cobra.Command { + t.Helper() + return buildStrictModeIntegrationRootCmdWithCatalog(t, f, nil) +} + +func buildStrictModeIntegrationRootCmdWithCatalog(t *testing.T, f *cmdutil.Factory, catalog *apicatalog.Catalog) *cobra.Command { t.Helper() rootCmd := &cobra.Command{Use: "lark-cli"} rootCmd.SilenceErrors = true @@ -113,7 +120,11 @@ func buildStrictModeIntegrationRootCmd(t *testing.T, f *cmdutil.Factory) *cobra. } rootCmd.AddCommand(auth.NewCmdAuth(f)) rootCmd.AddCommand(api.NewCmdApi(f, nil)) - service.RegisterServiceCommands(rootCmd, f) + if catalog != nil { + service.RegisterServiceCommandsFromCatalog(context.Background(), rootCmd, f, *catalog) + } else { + service.RegisterServiceCommands(rootCmd, f) + } shortcuts.RegisterShortcuts(rootCmd, f) if mode := f.ResolveStrictMode(context.Background()); mode.IsActive() { pruneForStrictMode(rootCmd, mode) @@ -121,6 +132,29 @@ func buildStrictModeIntegrationRootCmd(t *testing.T, f *cmdutil.Factory) *cobra. return rootCmd } +func strictModeFixtureCatalog() apicatalog.Catalog { + return apicatalog.New(apicatalog.SourceEmbedded, []meta.Service{ + { + Name: "fixture", + ServicePath: "/open-apis/fixture/v1", + Resources: map[string]meta.Resource{ + "things": { + Methods: map[string]meta.Method{ + "create": { + Path: "things", + HTTPMethod: "POST", + AccessTokens: []meta.Token{meta.TokenTenant}, + RequestBody: map[string]meta.Field{ + "name": {Type: "string"}, + }, + }, + }, + }, + }, + }, + }) +} + func newStrictModeDefaultFactory(t *testing.T, profile string, mode core.StrictMode) (*cmdutil.Factory, *bytes.Buffer, *bytes.Buffer) { t.Helper() t.Setenv(envvars.CliAppID, "") @@ -355,10 +389,11 @@ func TestIntegration_StrictModeBot_ProfileOverride_ServiceExplicitUserReturnsEnv func TestIntegration_StrictModeUser_ProfileOverride_ServiceBotOnlyMethodReturnsEnvelope(t *testing.T) { f, stdout, stderr := newStrictModeDefaultFactory(t, "target", core.StrictModeUser) - rootCmd := buildStrictModeIntegrationRootCmd(t, f) + catalog := strictModeFixtureCatalog() + rootCmd := buildStrictModeIntegrationRootCmdWithCatalog(t, f, &catalog) code := executeRootIntegration(t, f, rootCmd, []string{ - "im", "images", "create", "--data", `{"image_type":"message","image":"x"}`, "--dry-run", + "fixture", "things", "create", "--data", `{"name":"probe"}`, "--dry-run", }) if code != output.ExitValidation { diff --git a/cmd/schema/schema.go b/cmd/schema/schema.go index 64d5dc9a3..3b27967e0 100644 --- a/cmd/schema/schema.go +++ b/cmd/schema/schema.go @@ -65,13 +65,13 @@ func NewCmdSchema(f *cmdutil.Factory, runF func(*SchemaOptions) error) *cobra.Co return cmd } -// completeSchemaPath is a thin adapter over the embedded catalog's Complete. -// It uses the embedded source so completion candidates match what `schema` -// execution can resolve (both overlay-free). +// completeSchemaPath is a thin adapter over the schema catalog's Complete. +// It uses the same source as schema execution so completion candidates match +// what `schema` can resolve. func completeSchemaPath(f *cmdutil.Factory) func(*cobra.Command, []string, string) ([]string, cobra.ShellCompDirective) { return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { mode := f.ResolveStrictMode(cmd.Context()) - completions, noSpace := registry.EmbeddedCatalog().Complete(args, toComplete, registry.FilterForStrictMode(mode)) + completions, noSpace := registry.SchemaCatalog().Complete(args, toComplete, registry.FilterForStrictMode(mode)) directive := cobra.ShellCompDirectiveNoFileComp if noSpace { directive |= cobra.ShellCompDirectiveNoSpace @@ -86,13 +86,19 @@ func schemaRun(opts *SchemaOptions) error { return runSchema(out, apicatalog.ParsePath(opts.Args), mode) } -// runSchema resolves the path through the embedded catalog and renders the +// runSchema resolves the path through the schema catalog and renders the // matching envelope(s). The catalog owns navigation (Resolve + MethodRefs) and // schema owns rendering (Envelope/Envelopes); this adapter only chooses the // output shape — a single resolved method renders as one envelope object, // anything broader as an array — and maps resolve failures to hints. func runSchema(out io.Writer, parts []string, mode core.StrictMode) error { - catalog := registry.EmbeddedCatalog() + catalog := registry.SchemaCatalog() + if len(catalog.Services()) == 0 { + // No embedded metadata and the runtime fallback is empty too: offline + // with a cold cache, remote meta off, or an unwritable cache dir. + return errs.NewValidationError(errs.SubtypeFailedPrecondition, "No API metadata available"). + WithHint("this binary has no embedded API metadata; run any command with network access to the open platform once so metadata can be fetched and cached") + } target, err := catalog.Resolve(parts) if err != nil { return resolveError(err) diff --git a/cmd/update/update.go b/cmd/update/update.go index 43a047b2e..d42f87e9b 100644 --- a/cmd/update/update.go +++ b/cmd/update/update.go @@ -102,7 +102,8 @@ func NewCmdUpdate(f *cmdutil.Factory) *cobra.Command { Long: `Update lark-cli to the latest version. Detects the installation method automatically: - - npm install: runs npm install -g @larksuite/cli@ + - npm install: runs npm install -g @larksuite/cli@ + - pnpm install: runs pnpm add -g @larksuite/cli@ - manual/other: shows GitHub Releases download URL Use --json for structured output (for AI agents and scripts). @@ -164,7 +165,7 @@ func updateRun(opts *UpdateOptions) error { if !detect.CanAutoUpdate() { return doManualUpdate(opts, io, cur, latest, detect, updater) } - return doNpmUpdate(opts, io, cur, latest, updater) + return doAutoUpdate(opts, io, cur, latest, detect, updater) } // --- Output helpers --- @@ -226,12 +227,23 @@ func doManualUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest stri fmt.Fprintf(io.ErrOut, "To update manually, download the latest release:\n") fmt.Fprintf(io.ErrOut, " Release: %s\n", releaseURL(latest)) fmt.Fprintf(io.ErrOut, " Changelog: %s\n", changelogURL()) - fmt.Fprintf(io.ErrOut, "\nOr install via npm (note: skills will not be synced):\n npm install -g %s@%s\n npx skills add larksuite/cli -y -g # sync skills separately\n", selfupdate.NpmPackage, latest) + if detect.Method == selfupdate.InstallPnpm { + fmt.Fprintf(io.ErrOut, "\nOr install via pnpm (note: skills will not be synced):\n pnpm add -g %s@%s\n pnpm dlx skills add larksuite/cli -y -g # sync skills separately\n", selfupdate.NpmPackage, latest) + } else { + fmt.Fprintf(io.ErrOut, "\nOr install via npm (note: skills will not be synced):\n npm install -g %s@%s\n npx skills add larksuite/cli -y -g # sync skills separately\n", selfupdate.NpmPackage, latest) + } emitSkillsTextHints(io, skillsResult) return nil } -func doNpmUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest string, updater *selfupdate.Updater) error { +func doAutoUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest string, detect selfupdate.DetectResult, updater *selfupdate.Updater) error { + pm := "npm" + install := updater.RunNpmInstall + if detect.Method == selfupdate.InstallPnpm { + pm = "pnpm" + install = updater.RunPnpmInstall + } + restore, err := updater.PrepareSelfReplace() if err != nil { return reportError(opts, io, "update_error", @@ -239,19 +251,19 @@ func doNpmUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest string, } if !opts.JSON { - fmt.Fprintf(io.ErrOut, "Updating lark-cli %s %s %s via npm ...\n", cur, symArrow(), latest) + fmt.Fprintf(io.ErrOut, "Updating lark-cli %s %s %s via %s ...\n", cur, symArrow(), latest, pm) } - npmResult := updater.RunNpmInstall(latest) + npmResult := install(latest) if npmResult.Err != nil { restore() combined := npmResult.CombinedOutput() if opts.JSON { output.PrintJson(io.Out, map[string]interface{}{ "ok": false, "error": map[string]interface{}{ - "type": "update_error", "message": fmt.Sprintf("npm install failed: %s", npmResult.Err), + "type": "update_error", "message": fmt.Sprintf("%s install failed: %s", pm, npmResult.Err), "detail": selfupdate.Truncate(combined, maxNpmOutput), - "hint": permissionHint(combined), + "hint": permissionHint(combined, pm), }, }) return output.ErrBare(output.ExitAPI) @@ -263,7 +275,7 @@ func doNpmUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest string, fmt.Fprint(io.ErrOut, npmResult.Stderr.String()) } fmt.Fprintf(io.ErrOut, "\n%s Update failed: %s\n", symFail(), npmResult.Err) - if hint := permissionHint(combined); hint != "" { + if hint := permissionHint(combined, pm); hint != "" { fmt.Fprintf(io.ErrOut, " %s\n", hint) } return output.ErrBare(output.ExitAPI) @@ -274,7 +286,7 @@ func doNpmUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest string, if err := updater.VerifyBinary(latest); err != nil { restore() msg := fmt.Sprintf("new binary verification failed: %s", err) - hint := verificationFailureHint(updater, latest) + hint := verificationFailureHint(updater, latest, pm) if opts.JSON { output.PrintJson(io.Out, map[string]interface{}{ "ok": false, @@ -304,23 +316,33 @@ func doNpmUpdate(opts *UpdateOptions, io *cmdutil.IOStreams, cur, latest string, fmt.Fprintf(io.ErrOut, "\n%s Successfully updated lark-cli from %s to %s\n", symOK(), cur, latest) fmt.Fprintf(io.ErrOut, " Changelog: %s\n", changelogURL()) if skillsResult != nil { - fmt.Fprintf(io.ErrOut, "\nUpdating skills ...\n") + skillsPM := "npx" + if detect.Method == selfupdate.InstallPnpm && detect.PnpmAvailable { + skillsPM = "pnpm dlx" + } + fmt.Fprintf(io.ErrOut, "\nUpdating skills via %s ...\n", skillsPM) } emitSkillsTextHints(io, skillsResult) return nil } -func permissionHint(npmOutput string) string { - if strings.Contains(npmOutput, "EACCES") && !isWindows() { - return "Permission denied. Try: sudo lark-cli update, or adjust your npm global prefix: https://docs.npmjs.com/resolving-eacces-permissions-errors" +func permissionHint(pmOutput, pm string) string { + if !strings.Contains(pmOutput, "EACCES") || isWindows() { + return "" } - return "" + if pm == "pnpm" { + return "Permission denied. Ensure your pnpm global directory is writable — re-run `pnpm setup`, or see https://pnpm.io/pnpm-cli" + } + return "Permission denied. Try: sudo lark-cli update, or adjust your npm global prefix: https://docs.npmjs.com/resolving-eacces-permissions-errors" } -func verificationFailureHint(updater *selfupdate.Updater, latest string) string { +func verificationFailureHint(updater *selfupdate.Updater, latest, pm string) string { if updater.CanRestorePreviousVersion() { return "the previous version has been restored" } + if pm == "pnpm" { + return fmt.Sprintf("automatic rollback is unavailable on this platform; reinstall manually (skills will not be synced): pnpm add -g %s@%s && pnpm dlx skills add larksuite/cli -y -g, or download %s", selfupdate.NpmPackage, latest, releaseURL(latest)) + } return fmt.Sprintf("automatic rollback is unavailable on this platform; reinstall manually (skills will not be synced): npm install -g %s@%s && npx skills add larksuite/cli -y -g, or download %s", selfupdate.NpmPackage, latest, releaseURL(latest)) } diff --git a/cmd/update/update_test.go b/cmd/update/update_test.go index faf2f7629..177d4340f 100644 --- a/cmd/update/update_test.go +++ b/cmd/update/update_test.go @@ -57,6 +57,27 @@ func mockDetectAndNpm(t *testing.T, result selfupdate.DetectResult, npmFn func(s t.Cleanup(func() { newUpdater = origNew }) } +// mockDetectAndPnpm mirrors mockDetectAndNpm but wires the pnpm install path +// and fails the test if the npm install path is invoked. +func mockDetectAndPnpm(t *testing.T, result selfupdate.DetectResult, pnpmFn func(string) *selfupdate.NpmResult) { + t.Helper() + origNew := newUpdater + newUpdater = func() *selfupdate.Updater { + u := selfupdate.New() + u.DetectOverride = func() selfupdate.DetectResult { return result } + u.PnpmInstallOverride = pnpmFn + u.NpmInstallOverride = func(string) *selfupdate.NpmResult { + t.Errorf("npm install must not be called for a pnpm install") + return &selfupdate.NpmResult{} + } + u.VerifyOverride = func(string) error { return nil } + u.SkillsIndexFetchOverride = successfulSkillsIndexFetch() + u.SkillsCommandOverride = successfulSkillsCommand() + return u + } + t.Cleanup(func() { newUpdater = origNew }) +} + func successfulSkillsIndexFetch() func() *selfupdate.NpmResult { return func() *selfupdate.NpmResult { r := &selfupdate.NpmResult{} @@ -81,6 +102,110 @@ func successfulSkillsCommand() func(args ...string) *selfupdate.NpmResult { } } +func TestUpdatePnpm_JSON(t *testing.T) { + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) + f, stdout, _ := newTestFactory(t) + cmd := NewCmdUpdate(f) + cmd.SetArgs([]string{"--json"}) + origFetch := fetchLatest + fetchLatest = func() (string, error) { return "2.0.0", nil } + defer func() { fetchLatest = origFetch }() + origVersion := currentVersion + currentVersion = func() string { return "1.0.0" } + defer func() { currentVersion = origVersion }() + mockDetectAndPnpm(t, + selfupdate.DetectResult{Method: selfupdate.InstallPnpm, ResolvedPath: "/x/node_modules/.pnpm/@larksuite+cli@1.0.0/node_modules/@larksuite/cli/bin/lark-cli", PnpmAvailable: true}, + func(string) *selfupdate.NpmResult { return &selfupdate.NpmResult{} }, + ) + if err := cmd.Execute(); err != nil { + t.Fatalf("unexpected error: %v", err) + } + if out := stdout.String(); !strings.Contains(out, `"action": "updated"`) { + t.Errorf("expected updated in output, got: %s", out) + } +} + +func TestUpdatePnpm_Human(t *testing.T) { + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) + f, _, stderr := newTestFactory(t) + cmd := NewCmdUpdate(f) + cmd.SetArgs([]string{}) + origFetch := fetchLatest + fetchLatest = func() (string, error) { return "2.0.0", nil } + defer func() { fetchLatest = origFetch }() + origVersion := currentVersion + currentVersion = func() string { return "1.0.0" } + defer func() { currentVersion = origVersion }() + mockDetectAndPnpm(t, + selfupdate.DetectResult{Method: selfupdate.InstallPnpm, ResolvedPath: "/x/node_modules/.pnpm/@larksuite+cli@1.0.0/node_modules/@larksuite/cli/bin/lark-cli", PnpmAvailable: true}, + func(string) *selfupdate.NpmResult { return &selfupdate.NpmResult{} }, + ) + if err := cmd.Execute(); err != nil { + t.Fatalf("unexpected error: %v", err) + } + out := stderr.String() + if !strings.Contains(out, "via pnpm") { + t.Errorf("expected 'via pnpm' in stderr, got: %s", out) + } + if !strings.Contains(out, "Updating skills via pnpm dlx ...") { + t.Errorf("expected skills sync to report pnpm dlx launcher, got: %s", out) + } + if !strings.Contains(out, "Successfully updated") { + t.Errorf("expected success message, got: %s", out) + } +} + +func TestUpdatePnpm_InstallError_JSON(t *testing.T) { + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) + f, stdout, _ := newTestFactory(t) + cmd := NewCmdUpdate(f) + cmd.SetArgs([]string{"--json"}) + origFetch := fetchLatest + fetchLatest = func() (string, error) { return "2.0.0", nil } + defer func() { fetchLatest = origFetch }() + origVersion := currentVersion + currentVersion = func() string { return "1.0.0" } + defer func() { currentVersion = origVersion }() + mockDetectAndPnpm(t, + selfupdate.DetectResult{Method: selfupdate.InstallPnpm, ResolvedPath: "/x/node_modules/.pnpm/@larksuite+cli@1.0.0/node_modules/@larksuite/cli/bin/lark-cli", PnpmAvailable: true}, + func(string) *selfupdate.NpmResult { return &selfupdate.NpmResult{Err: errors.New("pnpm boom")} }, + ) + err := cmd.Execute() + if err == nil { + t.Fatal("expected error exit") + } + if out := stdout.String(); !strings.Contains(out, `"ok": false`) || !strings.Contains(out, "update_error") { + t.Errorf("expected failure envelope, got: %s", out) + } + if out := stdout.String(); !strings.Contains(out, "pnpm install failed") { + t.Errorf("expected message to report pnpm as the package manager, got: %s", out) + } +} + +func TestUpdatePnpm_Unavailable_ManualFallback(t *testing.T) { + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) + f, _, stderr := newTestFactory(t) + cmd := NewCmdUpdate(f) + cmd.SetArgs([]string{}) + origFetch := fetchLatest + fetchLatest = func() (string, error) { return "2.0.0", nil } + defer func() { fetchLatest = origFetch }() + origVersion := currentVersion + currentVersion = func() string { return "1.0.0" } + defer func() { currentVersion = origVersion }() + mockDetect(t, selfupdate.DetectResult{Method: selfupdate.InstallPnpm, ResolvedPath: "/x/node_modules/.pnpm/@larksuite+cli@1.0.0/node_modules/@larksuite/cli/bin/lark-cli", PnpmAvailable: false}) + if err := cmd.Execute(); err != nil { + t.Fatalf("unexpected error: %v", err) + } + out := stderr.String() + if !strings.Contains(out, "installed via pnpm, but pnpm is not available in PATH") { + t.Errorf("expected pnpm manual reason, got: %s", out) + } + if !strings.Contains(out, "pnpm add -g") { + t.Errorf("expected pnpm add -g hint, got: %s", out) + } +} + func TestNormalizeVersion(t *testing.T) { tests := []struct { input string @@ -266,6 +391,9 @@ func TestUpdateNpm_Human(t *testing.T) { if !strings.Contains(out, "Successfully updated") { t.Errorf("expected success message in stderr, got: %s", out) } + if !strings.Contains(out, "Updating skills via npx ...") { + t.Errorf("expected skills sync to report npx launcher for npm install, got: %s", out) + } } func TestUpdateForce_JSON(t *testing.T) { @@ -739,9 +867,9 @@ func TestPermissionHint(t *testing.T) { origOS := currentOS defer func() { currentOS = origOS }() - // Linux: EACCES should produce a hint with npm prefix guidance. + // Linux + npm: EACCES should produce a hint with npm prefix guidance. currentOS = "linux" - hint := permissionHint("EACCES: permission denied, access '/usr/local/lib'") + hint := permissionHint("EACCES: permission denied, access '/usr/local/lib'", "npm") if !strings.Contains(hint, "npm global prefix") { t.Errorf("expected npm prefix hint on linux, got: %s", hint) } @@ -749,16 +877,25 @@ func TestPermissionHint(t *testing.T) { t.Errorf("should not suggest raw sudo npm install, got: %s", hint) } + // Linux + pnpm: EACCES should point at pnpm setup, not npm prefix/sudo. + pnpmHint := permissionHint("EACCES: permission denied, access '/Users/x/Library/pnpm'", "pnpm") + if !strings.Contains(pnpmHint, "pnpm setup") { + t.Errorf("expected pnpm setup hint, got: %s", pnpmHint) + } + if strings.Contains(pnpmHint, "npm global prefix") || strings.Contains(pnpmHint, "sudo") { + t.Errorf("pnpm hint must not reference npm prefix or sudo, got: %s", pnpmHint) + } + // Windows: EACCES hint is suppressed (no EACCES on Windows). currentOS = "windows" - hint = permissionHint("EACCES: permission denied") + hint = permissionHint("EACCES: permission denied", "npm") if hint != "" { t.Errorf("expected empty hint on Windows, got: %s", hint) } // Non-EACCES error: always empty. currentOS = "linux" - if got := permissionHint("some other error"); got != "" { + if got := permissionHint("some other error", "npm"); got != "" { t.Errorf("expected empty hint for non-EACCES, got: %s", got) } } diff --git a/errs/ERROR_CONTRACT.md b/errs/ERROR_CONTRACT.md index 99dce8948..5262ce58d 100644 --- a/errs/ERROR_CONTRACT.md +++ b/errs/ERROR_CONTRACT.md @@ -72,6 +72,28 @@ other category. `error.type` is `"policy"`, `error.subtype` is one of `challenge_required` / `access_denied`, and process exit is `6` via `CategoryPolicy`. +### Success envelope (stdout) + +For contrast: success responses render to **stdout** as an +`output.Envelope` (`internal/output/envelope.go`), exit code `0`: + +```json +{ + "ok": true, + "identity": "user", + "data": { "guid": "e297d3d0-..." }, + "meta": { "count": 1 } +} +``` + +Consumers must branch on `ok` (or the process exit code). The success +envelope has **no top-level `code` or `msg` field** — `code` exists only +inside `error`, where it is the upstream numeric code (invariant 4). +Wrappers that follow the raw OpenAPI convention and test `code == 0` +will misclassify every successful call as a failure, which is +especially dangerous around write commands (e.g. retrying a create that +already succeeded). + ## Categories | Category | When | Exit | Typed struct | diff --git a/errs/types_test.go b/errs/types_test.go index 52e0f32e1..8279c2e46 100644 --- a/errs/types_test.go +++ b/errs/types_test.go @@ -319,7 +319,7 @@ func TestPermissionError_FullChain(t *testing.T) { WithHint("run: lark-cli auth login --scope %q", "mail:user_mailbox.message:send"). WithMissingScopes("mail:user_mailbox.message:send"). WithIdentity("user"). - WithConsoleURL("https://open.feishu.cn/app/cli_xxx/auth") + WithConsoleURL("https://open.feishu.cn/page/scope-apply?clientID=cli_xxx&scopes=mail:user_mailbox.message:send") if got.Category != errs.CategoryAuthorization { t.Errorf("Category = %q, want %q", got.Category, errs.CategoryAuthorization) @@ -419,7 +419,7 @@ func TestBuilder_WireFormat(t *testing.T) { WithHint("run lark-cli auth login --scope calendar:event:create"). WithMissingScopes("calendar:event:create"). WithIdentity("user"). - WithConsoleURL("https://open.feishu.cn/app/cli_xxx/auth") + WithConsoleURL("https://open.feishu.cn/page/scope-apply?clientID=cli_xxx&scopes=calendar:event:create") buf, err := json.Marshal(e) if err != nil { @@ -439,7 +439,7 @@ func TestBuilder_WireFormat(t *testing.T) { "hint": "run lark-cli auth login --scope calendar:event:create", "log_id": "20260520-0a1b2c3d", "identity": "user", - "console_url": "https://open.feishu.cn/app/cli_xxx/auth", + "console_url": "https://open.feishu.cn/page/scope-apply?clientID=cli_xxx&scopes=calendar:event:create", "missing_scopes": []any{"calendar:event:create"}, } for k, want := range wantFields { diff --git a/internal/affordance/affordance.go b/internal/affordance/affordance.go index b0e49836d..6ad46cd59 100644 --- a/internal/affordance/affordance.go +++ b/internal/affordance/affordance.go @@ -77,14 +77,10 @@ func loadService(service string) map[string]json.RawMessage { // space→dot fallback covers domains where the two already coincide. func commandFormResolver(service string) func(string) string { byForm := map[string]string{} - for _, svc := range registry.EmbeddedServicesTyped() { - if svc.Name != service { - continue - } + if svc, ok := registry.SchemaCatalog().Service(service); ok { for _, ref := range apicatalog.ServiceMethods(svc, nil) { byForm[strings.Join(ref.CommandPath()[1:], " ")] = ref.Method.ID } - break } return func(h string) string { h = strings.TrimSpace(h) diff --git a/internal/cmdutil/secheader.go b/internal/cmdutil/secheader.go index 9b6fa83ea..cf99f9fd4 100644 --- a/internal/cmdutil/secheader.go +++ b/internal/cmdutil/secheader.go @@ -6,12 +6,10 @@ package cmdutil import ( "context" "net/http" - "os" "reflect" "runtime/debug" "strings" "sync" - "unicode" "github.com/larksuite/cli/extension/credential" "github.com/larksuite/cli/extension/fileio" @@ -40,8 +38,6 @@ const ( BuildKindUnknown = "unknown" officialModulePath = "github.com/larksuite/cli" - - agentTraceMaxLen = 1024 ) // UserAgentValue returns the User-Agent value: "lark-cli/{version}". @@ -49,25 +45,6 @@ func UserAgentValue() string { return SourceValue + "/" + build.Version } -// AgentTraceValue returns a header-safe value from the -// LARKSUITE_CLI_AGENT_TRACE environment variable. It trims -// surrounding whitespace, rejects values containing any Unicode -// control character or exceeding agentTraceMaxLen, and returns "" -// for any invalid or empty value. Callers can use the result -// directly in HTTP headers without further sanitisation. -func AgentTraceValue() string { - v := strings.TrimSpace(os.Getenv(envvars.CliAgentTrace)) - if v == "" || len(v) > agentTraceMaxLen { - return "" - } - for _, r := range v { - if unicode.IsControl(r) { - return "" - } - } - return v -} - // BaseSecurityHeaders returns headers that every request must carry. func BaseSecurityHeaders() http.Header { h := make(http.Header) @@ -75,7 +52,7 @@ func BaseSecurityHeaders() http.Header { h.Set(HeaderVersion, build.Version) h.Set(HeaderBuild, DetectBuildKind()) h.Set(HeaderUserAgent, UserAgentValue()) - if v := AgentTraceValue(); v != "" { + if v := envvars.AgentTrace(); v != "" { h.Set(HeaderAgentTrace, v) } return h diff --git a/internal/cmdutil/secheader_test.go b/internal/cmdutil/secheader_test.go index 6b116f458..b206d8171 100644 --- a/internal/cmdutil/secheader_test.go +++ b/internal/cmdutil/secheader_test.go @@ -6,7 +6,6 @@ package cmdutil import ( "context" "net/http" - "strings" "testing" "github.com/larksuite/cli/extension/credential" @@ -264,88 +263,9 @@ func TestBaseSecurityHeaders_AllRequiredHeaders(t *testing.T) { } // --------------------------------------------------------------------------- -// AgentTraceValue / HeaderAgentTrace +// HeaderAgentTrace injection (via BaseSecurityHeaders) // --------------------------------------------------------------------------- -func TestAgentTraceValue_EmptyWhenEnvUnset(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty when env unset", got) - } -} - -func TestAgentTraceValue_ReturnsCleanValue(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "trace-abc-123") - if got := AgentTraceValue(); got != "trace-abc-123" { - t.Fatalf("AgentTraceValue() = %q, want %q", got, "trace-abc-123") - } -} - -func TestAgentTraceValue_TrimsWhitespace(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, " trace-trim ") - if got := AgentTraceValue(); got != "trace-trim" { - t.Fatalf("AgentTraceValue() = %q, want %q (whitespace trimmed)", got, "trace-trim") - } -} - -func TestAgentTraceValue_OnlyWhitespace_ReturnsEmpty(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, " ") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty for whitespace-only value", got) - } -} - -func TestAgentTraceValue_RejectsCRLF(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "val\r\nX-Evil: attack") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty for CR/LF value", got) - } -} - -func TestAgentTraceValue_RejectsLF(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "val\nX-Evil: attack") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty for LF value", got) - } -} - -func TestAgentTraceValue_RejectsTab(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "val\tinjected") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty for tab value", got) - } -} - -func TestAgentTraceValue_RejectsControlChar(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "val\x01injected") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty for control char value", got) - } -} - -func TestAgentTraceValue_RejectsDEL(t *testing.T) { - t.Setenv(envvars.CliAgentTrace, "val\x7finjected") - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() = %q, want empty for DEL value", got) - } -} - -func TestAgentTraceValue_RejectsOverlongValue(t *testing.T) { - longVal := strings.Repeat("a", agentTraceMaxLen+1) - t.Setenv(envvars.CliAgentTrace, longVal) - if got := AgentTraceValue(); got != "" { - t.Fatalf("AgentTraceValue() returned non-empty for %d-byte value (max %d)", len(longVal), agentTraceMaxLen) - } -} - -func TestAgentTraceValue_AcceptsMaxLengthValue(t *testing.T) { - val := strings.Repeat("a", agentTraceMaxLen) - t.Setenv(envvars.CliAgentTrace, val) - if got := AgentTraceValue(); got != val { - t.Fatalf("AgentTraceValue() = %q, want %d-byte value accepted", got, agentTraceMaxLen) - } -} - func TestBaseSecurityHeaders_NoAgentTraceHeaderWhenEnvUnset(t *testing.T) { t.Setenv(envvars.CliAgentTrace, "") h := BaseSecurityHeaders() diff --git a/internal/envvars/envvars.go b/internal/envvars/envvars.go index 7b4a23464..36b60e42d 100644 --- a/internal/envvars/envvars.go +++ b/internal/envvars/envvars.go @@ -19,6 +19,7 @@ const ( // Content safety scanning mode CliContentSafetyMode = "LARKSUITE_CLI_CONTENT_SAFETY_MODE" + CliAgentName = "LARKSUITE_CLI_AGENT_NAME" CliAgentTrace = "LARKSUITE_CLI_AGENT_TRACE" CliProxyEnable = "LARKSUITE_CLI_PROXY_ENABLE" diff --git a/internal/envvars/read.go b/internal/envvars/read.go new file mode 100644 index 000000000..34868386c --- /dev/null +++ b/internal/envvars/read.go @@ -0,0 +1,36 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package envvars + +import ( + "os" + "strings" + "unicode" +) + +const ( + agentNameMaxLen = 128 + agentTraceMaxLen = 1024 +) + +func AgentName() string { + return sanitizeSingleLine(os.Getenv(CliAgentName), agentNameMaxLen) +} + +func AgentTrace() string { + return sanitizeSingleLine(os.Getenv(CliAgentTrace), agentTraceMaxLen) +} + +func sanitizeSingleLine(raw string, maxLen int) string { + v := strings.TrimSpace(raw) + if v == "" || len(v) > maxLen { + return "" + } + for _, r := range v { + if unicode.IsControl(r) { + return "" + } + } + return v +} diff --git a/internal/envvars/read_test.go b/internal/envvars/read_test.go new file mode 100644 index 000000000..39903e17b --- /dev/null +++ b/internal/envvars/read_test.go @@ -0,0 +1,131 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package envvars + +import ( + "strings" + "testing" +) + +func TestAgentName_EmptyWhenEnvUnset(t *testing.T) { + t.Setenv(CliAgentName, "") + if got := AgentName(); got != "" { + t.Fatalf("AgentName() = %q, want empty when env unset", got) + } +} + +func TestAgentName_ReturnsCleanValue(t *testing.T) { + t.Setenv(CliAgentName, "claude-code") + if got := AgentName(); got != "claude-code" { + t.Fatalf("AgentName() = %q, want %q", got, "claude-code") + } +} + +func TestAgentName_TrimsWhitespace(t *testing.T) { + t.Setenv(CliAgentName, " cursor ") + if got := AgentName(); got != "cursor" { + t.Fatalf("AgentName() = %q, want %q (whitespace trimmed)", got, "cursor") + } +} + +func TestAgentName_RejectsCRLFInjection(t *testing.T) { + t.Setenv(CliAgentName, "agent\r\nX-Evil: attack") + if got := AgentName(); got != "" { + t.Fatalf("AgentName() = %q, want empty for CR/LF value", got) + } +} + +func TestAgentName_RejectsControlChar(t *testing.T) { + t.Setenv(CliAgentName, "agent\x01injected") + if got := AgentName(); got != "" { + t.Fatalf("AgentName() = %q, want empty for control char value", got) + } +} + +func TestAgentName_RejectsOverlongValue(t *testing.T) { + longVal := strings.Repeat("a", agentNameMaxLen+1) + t.Setenv(CliAgentName, longVal) + if got := AgentName(); got != "" { + t.Fatalf("AgentName() returned non-empty for %d-byte value (max %d)", len(longVal), agentNameMaxLen) + } +} + +func TestAgentTrace_EmptyWhenEnvUnset(t *testing.T) { + t.Setenv(CliAgentTrace, "") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty when env unset", got) + } +} + +func TestAgentTrace_ReturnsCleanValue(t *testing.T) { + t.Setenv(CliAgentTrace, "trace-abc-123") + if got := AgentTrace(); got != "trace-abc-123" { + t.Fatalf("AgentTrace() = %q, want %q", got, "trace-abc-123") + } +} + +func TestAgentTrace_TrimsWhitespace(t *testing.T) { + t.Setenv(CliAgentTrace, " trace-trim ") + if got := AgentTrace(); got != "trace-trim" { + t.Fatalf("AgentTrace() = %q, want %q (whitespace trimmed)", got, "trace-trim") + } +} + +func TestAgentTrace_OnlyWhitespace_ReturnsEmpty(t *testing.T) { + t.Setenv(CliAgentTrace, " ") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty for whitespace-only value", got) + } +} + +func TestAgentTrace_RejectsCRLF(t *testing.T) { + t.Setenv(CliAgentTrace, "val\r\nX-Evil: attack") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty for CR/LF value", got) + } +} + +func TestAgentTrace_RejectsLF(t *testing.T) { + t.Setenv(CliAgentTrace, "val\nX-Evil: attack") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty for LF value", got) + } +} + +func TestAgentTrace_RejectsTab(t *testing.T) { + t.Setenv(CliAgentTrace, "val\tinjected") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty for tab value", got) + } +} + +func TestAgentTrace_RejectsControlChar(t *testing.T) { + t.Setenv(CliAgentTrace, "val\x01injected") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty for control char value", got) + } +} + +func TestAgentTrace_RejectsDEL(t *testing.T) { + t.Setenv(CliAgentTrace, "val\x7finjected") + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() = %q, want empty for DEL value", got) + } +} + +func TestAgentTrace_RejectsOverlongValue(t *testing.T) { + longVal := strings.Repeat("a", agentTraceMaxLen+1) + t.Setenv(CliAgentTrace, longVal) + if got := AgentTrace(); got != "" { + t.Fatalf("AgentTrace() returned non-empty for %d-byte value (max %d)", len(longVal), agentTraceMaxLen) + } +} + +func TestAgentTrace_AcceptsMaxLengthValue(t *testing.T) { + val := strings.Repeat("a", agentTraceMaxLen) + t.Setenv(CliAgentTrace, val) + if got := AgentTrace(); got != val { + t.Fatalf("AgentTrace() = %q, want %d-byte value accepted", got, agentTraceMaxLen) + } +} diff --git a/internal/errclass/classify.go b/internal/errclass/classify.go index a2d1a740c..bc200b4de 100644 --- a/internal/errclass/classify.go +++ b/internal/errclass/classify.go @@ -10,12 +10,14 @@ import ( "strings" "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/core" ) // ClassifyContext is the contextual data BuildAPIError uses to populate // identity-aware fields on typed errors (PermissionError.Identity / ConsoleURL). -// Identity is a plain string ("user" / "bot" / "") so this package does not -// depend on internal/core (which would create an import cycle). +// Brand and Identity are plain strings at this boundary; ConsoleURL normalizes +// Brand through core.ParseBrand, so callers can pass a raw brand string without +// coupling this contract to core's brand enum. type ClassifyContext struct { Brand string // "feishu" | "lark" — drives console_url host AppID string // placed in console_url @@ -444,28 +446,27 @@ func extractMissingScopes(resp map[string]any) []string { return out } -// ConsoleURL composes the Feishu/Lark open-platform scope-grant console URL, -// suitable for PermissionError.ConsoleURL. Empty appID → empty string. Empty -// scopes list returns the bare /auth landing page; scopes are joined with -// commas in the `q` query parameter so the console can pre-select them. +// ConsoleURL composes the Feishu/Lark open-platform application-scope apply +// page URL (the official open-pages `/page/scope-apply` entry), suitable for +// PermissionError.ConsoleURL. Empty appID → empty string. Empty scopes list +// returns the page carrying only clientID; otherwise scopes are joined with +// commas in the `scopes` query parameter so the console can pre-select them. // // brand is "feishu" or "lark"; unknown values default to feishu. func ConsoleURL(brand, appID string, scopes []string) string { if appID == "" { return "" } - host := "open.feishu.cn" - if brand == "lark" { - host = "open.larksuite.com" - } - // PathEscape on appID — it sits in the URL path. QueryEscape on the - // comma-joined scopes — they sit in the `?q=` value, and untrusted scope - // content must not be able to inject extra query parameters via `&`/`#`. - pathID := url.PathEscape(appID) + // QueryEscape both values — clientID and scopes both sit in the query + // string, and untrusted content must not be able to inject extra query + // parameters via `&`/`#`. The brand→host mapping is owned by core so the + // open-platform base URL stays a single source of truth. + base := fmt.Sprintf("%s/page/scope-apply?clientID=%s", + core.ResolveOpenBaseURL(core.ParseBrand(brand)), url.QueryEscape(appID)) if len(scopes) == 0 { - return fmt.Sprintf("https://%s/app/%s/auth", host, pathID) + return base } - return fmt.Sprintf("https://%s/app/%s/auth?q=%s", host, pathID, url.QueryEscape(strings.Join(scopes, ","))) + return base + "&scopes=" + url.QueryEscape(strings.Join(scopes, ",")) } func intFromAny(v any) int { diff --git a/internal/errclass/classify_test.go b/internal/errclass/classify_test.go index 9ba38ca11..d4dff5809 100644 --- a/internal/errclass/classify_test.go +++ b/internal/errclass/classify_test.go @@ -422,8 +422,8 @@ func TestConsoleURL_FeishuBrand(t *testing.T) { if !ok { t.Fatalf("expected *errs.PermissionError, got %T", err) } - if !strings.Contains(pe.ConsoleURL, "open.feishu.cn/app/cli_a123") { - t.Fatalf("ConsoleURL = %q, want open.feishu.cn prefix", pe.ConsoleURL) + if !strings.Contains(pe.ConsoleURL, "open.feishu.cn/page/scope-apply?clientID=cli_a123") { + t.Fatalf("ConsoleURL = %q, want open.feishu.cn scope-apply page", pe.ConsoleURL) } } @@ -434,8 +434,8 @@ func TestConsoleURL_LarkBrand(t *testing.T) { if !ok { t.Fatalf("expected *errs.PermissionError, got %T", err) } - if !strings.Contains(pe.ConsoleURL, "open.larksuite.com/app/cli_a123") { - t.Fatalf("ConsoleURL = %q, want open.larksuite.com prefix", pe.ConsoleURL) + if !strings.Contains(pe.ConsoleURL, "open.larksuite.com/page/scope-apply?clientID=cli_a123") { + t.Fatalf("ConsoleURL = %q, want open.larksuite.com scope-apply page", pe.ConsoleURL) } } @@ -485,35 +485,35 @@ func TestConsoleURL_EscapesDangerousChars(t *testing.T) { name: "ampersand in scope smuggles extra param", appID: "cli_good", scopes: []string{"scope&evil=injected"}, - wantInURL: []string{"q=scope%26evil%3Dinjected"}, - denyInURL: []string{"q=scope&evil=injected"}, + wantInURL: []string{"scopes=scope%26evil%3Dinjected"}, + denyInURL: []string{"scopes=scope&evil=injected"}, }, { name: "hash in scope splits fragment", appID: "cli_good", scopes: []string{"scope#fragment"}, - wantInURL: []string{"q=scope%23fragment"}, - denyInURL: []string{"q=scope#fragment"}, + wantInURL: []string{"scopes=scope%23fragment"}, + denyInURL: []string{"scopes=scope#fragment"}, }, { name: "question mark in appID prematurely opens query", appID: "good?q=injected", scopes: []string{"docx:document"}, - wantInURL: []string{"/app/good%3Fq=injected/auth"}, - denyInURL: []string{"/app/good?q=injected/auth"}, + wantInURL: []string{"clientID=good%3Fq%3Dinjected"}, + denyInURL: []string{"clientID=good?q=injected"}, }, { name: "hash in appID truncates URL", appID: "good#fragment", scopes: []string{"docx:document"}, - wantInURL: []string{"/app/good%23fragment/auth"}, - denyInURL: []string{"/app/good#fragment/auth"}, + wantInURL: []string{"clientID=good%23fragment"}, + denyInURL: []string{"clientID=good#fragment"}, }, { - name: "slash in appID escapes path segment", + name: "slash in appID does not open a new path segment", appID: "good/extra/segment", scopes: []string{"docx:document"}, - wantInURL: []string{"/app/good%2Fextra%2Fsegment/auth"}, + wantInURL: []string{"clientID=good%2Fextra%2Fsegment"}, }, } @@ -553,8 +553,8 @@ func TestPermissionError_NoViolations(t *testing.T) { if pe.MissingScopes != nil { t.Errorf("MissingScopes should be nil; got %v", pe.MissingScopes) } - if !strings.HasSuffix(pe.ConsoleURL, "/app/cli_a123/auth") { - t.Errorf("ConsoleURL (no scopes) = %q, want trailing /app/cli_a123/auth", pe.ConsoleURL) + if !strings.HasSuffix(pe.ConsoleURL, "/page/scope-apply?clientID=cli_a123") { + t.Errorf("ConsoleURL (no scopes) = %q, want trailing /page/scope-apply?clientID=cli_a123", pe.ConsoleURL) } } @@ -758,7 +758,7 @@ func TestBuildPermissionHint_AppMissingScopeRoutesToConsole(t *testing.T) { // at the app level — re-authenticating cannot fix it. The hint must // point to the developer console regardless of caller identity, or // agents will loop on `auth login` forever. - consoleURL := "https://open.feishu.cn/app/cli_x/auth?q=contact%3Acontact" + consoleURL := "https://open.feishu.cn/page/scope-apply?clientID=cli_x&scopes=contact%3Acontact" for _, identity := range []string{"user", "bot", ""} { got := errclass.PermissionHint([]string{"contact:contact"}, identity, errs.SubtypeAppScopeNotApplied, consoleURL) if !strings.Contains(got, "developer console") { diff --git a/internal/errclass/codemeta_drive.go b/internal/errclass/codemeta_drive.go index 83ac13ecd..113949b24 100644 --- a/internal/errclass/codemeta_drive.go +++ b/internal/errclass/codemeta_drive.go @@ -10,20 +10,22 @@ import "github.com/larksuite/cli/errs" // ambiguous codes fall back to CategoryAPI via BuildAPIError. // BuildAPIError consumes this map via mergeCodeMeta + LookupCodeMeta. var driveCodeMeta = map[int]CodeMeta{ - 1061001: {Category: errs.CategoryAPI, Subtype: errs.SubtypeServerError, Retryable: true}, // Drive "unknown error" - 1061002: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // params error - 1061004: {Category: errs.CategoryAuthorization, Subtype: errs.SubtypePermissionDenied}, // forbidden - 1061007: {Category: errs.CategoryAPI, Subtype: errs.SubtypeNotFound}, // file has been deleted - 1061043: {Category: errs.CategoryAPI, Subtype: errs.SubtypeQuotaExceeded}, // file size beyond limit - 1061044: {Category: errs.CategoryAPI, Subtype: errs.SubtypeNotFound}, // parent folder does not exist (upload) - 1062009: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // actual size inconsistent with declared size - 1063001: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // secure label invalid parameter - 1063002: {Category: errs.CategoryAuthorization, Subtype: errs.SubtypePermissionDenied}, // secure label permission denied - 1063013: {Category: errs.CategoryValidation, Subtype: errs.SubtypeFailedPrecondition}, // secure label downgrade requires approval - 1069302: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // comment endpoint "Invalid or missing parameters" - 99992402: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // platform field validation failed - 9499: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // invalid parameter type in JSON field - 2200: {Category: errs.CategoryAPI, Subtype: errs.SubtypeServerError, Retryable: true}, // Drive tenant/internal errors + 1061001: {Category: errs.CategoryAPI, Subtype: errs.SubtypeServerError, Retryable: true}, // Drive "unknown error" + 1061002: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // params error + 1061004: {Category: errs.CategoryAuthorization, Subtype: errs.SubtypePermissionDenied}, // forbidden + 1061007: {Category: errs.CategoryAPI, Subtype: errs.SubtypeNotFound}, // file has been deleted + 1061043: {Category: errs.CategoryAPI, Subtype: errs.SubtypeQuotaExceeded}, // file size beyond limit + 1061044: {Category: errs.CategoryAPI, Subtype: errs.SubtypeNotFound}, // parent folder does not exist (upload) + 1061101: {Category: errs.CategoryAPI, Subtype: errs.SubtypeQuotaExceeded}, // file quota exceeded + 1062009: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // actual size inconsistent with declared size + 1063001: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // secure label invalid parameter + 1063002: {Category: errs.CategoryAuthorization, Subtype: errs.SubtypePermissionDenied}, // secure label permission denied + 1063013: {Category: errs.CategoryValidation, Subtype: errs.SubtypeFailedPrecondition}, // secure label downgrade requires approval + 1069302: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // comment endpoint "Invalid or missing parameters" + 99992402: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // platform field validation failed + 9499: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // invalid parameter type in JSON field + 2200: {Category: errs.CategoryAPI, Subtype: errs.SubtypeServerError, Retryable: true}, // Drive tenant/internal errors + 233523001: {Category: errs.CategoryAPI, Subtype: errs.SubtypeServerError, Retryable: true}, // Drive/docs transient server error } func init() { mergeCodeMeta(driveCodeMeta, "drive") } diff --git a/internal/errclass/codemeta_test.go b/internal/errclass/codemeta_test.go index 521850e65..0d766f3de 100644 --- a/internal/errclass/codemeta_test.go +++ b/internal/errclass/codemeta_test.go @@ -114,8 +114,35 @@ func TestLookupCodeMeta_DrivePushCodes(t *testing.T) { {1061004, errs.CategoryAuthorization, errs.SubtypePermissionDenied, false}, {1061007, errs.CategoryAPI, errs.SubtypeNotFound, false}, {1061043, errs.CategoryAPI, errs.SubtypeQuotaExceeded, false}, + {1061101, errs.CategoryAPI, errs.SubtypeQuotaExceeded, false}, {1062009, errs.CategoryAPI, errs.SubtypeInvalidParameters, false}, {2200, errs.CategoryAPI, errs.SubtypeServerError, true}, + {233523001, errs.CategoryAPI, errs.SubtypeServerError, true}, + } + for _, tc := range cases { + t.Run(fmt.Sprintf("%d", tc.code), func(t *testing.T) { + got, ok := LookupCodeMeta(tc.code) + if !ok { + t.Fatalf("LookupCodeMeta(%d) ok=false, want true", tc.code) + } + if got.Category != tc.wantCat || got.Subtype != tc.wantSubtype || got.Retryable != tc.wantRetry { + t.Fatalf("LookupCodeMeta(%d) = %+v, want Category=%v Subtype=%v Retryable=%v", + tc.code, got, tc.wantCat, tc.wantSubtype, tc.wantRetry) + } + }) + } +} + +func TestLookupCodeMeta_WikiCodes(t *testing.T) { + cases := []struct { + code int + wantCat errs.Category + wantSubtype errs.Subtype + wantRetry bool + }{ + {131002, errs.CategoryAPI, errs.SubtypeInvalidParameters, false}, + {131005, errs.CategoryAPI, errs.SubtypeNotFound, false}, + {131006, errs.CategoryAuthorization, errs.SubtypePermissionDenied, false}, } for _, tc := range cases { t.Run(fmt.Sprintf("%d", tc.code), func(t *testing.T) { diff --git a/internal/errclass/codemeta_wiki.go b/internal/errclass/codemeta_wiki.go new file mode 100644 index 000000000..1346a0caa --- /dev/null +++ b/internal/errclass/codemeta_wiki.go @@ -0,0 +1,17 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package errclass + +import "github.com/larksuite/cli/errs" + +// wikiCodeMeta holds wiki-service Lark code -> CodeMeta mappings observed from +// wiki shortcut failure telemetry. Keep these to wiki-wide meanings only; add +// command-specific recovery guidance at the shortcut layer. +var wikiCodeMeta = map[int]CodeMeta{ + 131002: {Category: errs.CategoryAPI, Subtype: errs.SubtypeInvalidParameters}, // param err: space_id is not int / invalid page_token + 131005: {Category: errs.CategoryAPI, Subtype: errs.SubtypeNotFound}, // wiki node / space not found + 131006: {Category: errs.CategoryAuthorization, Subtype: errs.SubtypePermissionDenied}, // wiki space/node read permission denied +} + +func init() { mergeCodeMeta(wikiCodeMeta, "wiki") } diff --git a/internal/qualitygate/publiccontent/scan.go b/internal/qualitygate/publiccontent/scan.go index c2376c77c..577697a58 100644 --- a/internal/qualitygate/publiccontent/scan.go +++ b/internal/qualitygate/publiccontent/scan.go @@ -7,6 +7,7 @@ import ( "encoding/base64" "encoding/json" "fmt" + "math" "path/filepath" "sort" "strings" @@ -78,12 +79,15 @@ func scanText(file, source, text string, detectorFile bool) []Finding { out = append(out, newFinding("public_content_bearer_header", file, lineNo, source, "Authorization: Bearer ")) } for _, match := range credentialURLRE.FindAllString(line, -1) { - if isPlaceholderCredentialURL(match) { + if isPlaceholderCredentialURL(file, match) { continue } out = append(out, newFinding("public_content_credential_url", file, lineNo, source, redactCredentialURL(match))) } for _, match := range privateIPv4RE.FindAllString(line, -1) { + if !warnForPrivateIPv4(file) { + continue + } out = append(out, newFinding("public_content_private_ipv4", file, lineNo, source, match)) } if source == "branch" && automationBranchRE.MatchString(line) { @@ -130,6 +134,9 @@ func isCredentialAssignmentMatch(match string) bool { if isBenignTokenField(name) && !credentialShapedValue(value) { return false } + if isWeakTokenCredentialKey(name) && !weakTokenValueLooksCredentialLike(value) { + return false + } return isExplicitCredentialKey(name) } @@ -284,6 +291,9 @@ func tokenLikePlaceholderValue(key, value string) bool { if normalized == "" || credentialShapedIdentifier(normalized) { return false } + if authCredentialTokenKey(key) { + return false + } return resourceTokenPlaceholderValue(value) || maskedTokenFixturePlaceholderValue(key, normalized) || isPlaceholderValue(value) || @@ -313,11 +323,109 @@ func maskedTokenFixturePlaceholderValue(key, value string) bool { return stars >= 6 && alnum > 0 } +func isWeakTokenCredentialKey(key string) bool { + if authCredentialTokenKey(key) || isStrongTokenCredentialKey(key) { + return false + } + return key == "token" || + strings.HasSuffix(key, "_token") || + strings.HasSuffix(key, "-token") +} + +func isStrongTokenCredentialKey(key string) bool { + parts := credentialKeyParts(strings.ReplaceAll(strings.ToLower(key), "-", "_")) + for _, phrase := range [][2]string{ + {"access", "token"}, + {"refresh", "token"}, + {"auth", "token"}, + {"bearer", "token"}, + {"session", "token"}, + {"service", "token"}, + {"bot", "token"}, + {"api", "token"}, + {"secret", "token"}, + } { + if hasAdjacentCredentialParts(parts, phrase[0], phrase[1]) { + return true + } + } + return false +} + +func weakTokenValueLooksCredentialLike(value string) bool { + normalized := strings.ToLower(strings.Trim(value, `"'<>`)) + if normalized == "" || + isNonSecretLiteralValue(value) || + isPlaceholderValue(value) { + return false + } + candidate := unwrapCredentialValue(normalized) + return credentialShapedIdentifier(candidate) || + highEntropyCredentialValue(candidate) || + commandSubstitutionLooksCredentialLike(normalized) || + (strings.Contains(normalized, "://") && + urlRemainderLooksCredentialLike(removeAnglePlaceholders(normalized))) +} + +func unwrapCredentialValue(value string) string { + value = strings.TrimSpace(strings.Trim(value, `"'<>`)) + if strings.HasPrefix(value, "${{") && strings.HasSuffix(value, "}}") { + value = strings.TrimSpace(strings.TrimSuffix(strings.TrimPrefix(value, "${{"), "}}")) + } + value = strings.TrimPrefix(value, "$") + value = strings.Trim(value, "%") + return strings.TrimSpace(value) +} + +func highEntropyCredentialValue(value string) bool { + if len(value) < 32 { + return false + } + var hasLetter, hasDigit bool + for _, r := range value { + switch { + case r >= 'a' && r <= 'z': + hasLetter = true + case r >= '0' && r <= '9': + hasDigit = true + case r == '_' || r == '-' || r == '.' || r == '=': + default: + return false + } + } + return hasLetter && hasDigit && shannonEntropy(value) >= 3.5 +} + +func shannonEntropy(value string) float64 { + if value == "" { + return 0 + } + counts := map[rune]int{} + for _, r := range value { + counts[r]++ + } + var entropy float64 + length := float64(len([]rune(value))) + for _, count := range counts { + p := float64(count) / length + entropy -= p * log2(p) + } + return entropy +} + +func log2(value float64) float64 { + return math.Log(value) / math.Ln2 +} + func authCredentialTokenKey(key string) bool { switch strings.ReplaceAll(strings.ToLower(key), "-", "_") { case "access_token", + "api_token", + "bot_token", "refresh_token", + "secret_token", "session_token", + "service_token", "bearer_token", "auth_token", "authorization_token", @@ -844,7 +952,7 @@ func looksLikeEqualityComparison(value string) bool { return strings.HasPrefix(strings.TrimSpace(value), "=") } -func isPlaceholderCredentialURL(raw string) bool { +func isPlaceholderCredentialURL(file, raw string) bool { userInfo, ok := credentialURLUserInfo(raw) if !ok { return false @@ -853,7 +961,8 @@ func isPlaceholderCredentialURL(raw string) bool { if !ok { return false } - return credentialURLPasswordPlaceholder(password) + return credentialURLPasswordPlaceholder(password) || + (sourceOrTestFixtureFile(file) && credentialURLPasswordFixture(password)) } func credentialURLPasswordPlaceholder(password string) bool { @@ -867,6 +976,46 @@ func credentialURLPasswordPlaceholder(password string) bool { return angleWrappedPlaceholder(decoded) || percentWrappedPlaceholder(decoded) } +func credentialURLPasswordFixture(password string) bool { + normalized := strings.ToLower(strings.Trim(password, `"'`)) + switch normalized { + case "p", + "pass", + "password", + "pat_abc", + "pw", + "s3cret", + "secret", + "t": + return true + default: + return false + } +} + +func sourceOrTestFixtureFile(file string) bool { + normalized := filepath.ToSlash(file) + return sourceCodeFile(normalized) || + strings.HasPrefix(normalized, "testdata/") || + strings.HasPrefix(normalized, "fixtures/") || + strings.Contains(normalized, "/testdata/") || + strings.Contains(normalized, "/fixtures/") +} + +func warnForPrivateIPv4(file string) bool { + normalized := filepath.ToSlash(file) + if sourceOrTestFixtureFile(normalized) { + return false + } + switch filepath.Ext(normalized) { + case ".md", ".mdx", ".txt", ".json", ".yaml", ".yml", ".toml", ".env": + return true + default: + return strings.HasPrefix(normalized, "docs/") || + strings.HasPrefix(normalized, "skills/") + } +} + func credentialURLUserInfo(raw string) (string, bool) { schemeIdx := strings.Index(raw, "://") if schemeIdx < 0 { diff --git a/internal/qualitygate/publiccontent/scan_test.go b/internal/qualitygate/publiccontent/scan_test.go index 4dbb18b6a..ad8825979 100644 --- a/internal/qualitygate/publiccontent/scan_test.go +++ b/internal/qualitygate/publiccontent/scan_test.go @@ -61,6 +61,19 @@ func TestScanFileWarnsForPrivateIPv4Examples(t *testing.T) { } } +func TestScanFileAllowsPrivateIPv4SourceFixtures(t *testing.T) { + got := ScanFile("internal/transport/warn_test.go", []byte(strings.Join([]string{ + `proxy := "http://user:pass@10.0.0.1:3128"`, + `target := "socks5://admin:secret@172.16.0.1:1080"`, + `host := "192.168.0.10"`, + }, "\n")+"\n")) + for _, item := range got { + if item.Rule == "public_content_private_ipv4" { + t.Fatalf("private IPv4 source fixtures should not be public content findings: %#v", got) + } + } +} + func TestSemanticCandidateRequiresSpecificRiskSignals(t *testing.T) { benign := semanticCandidate("docs/network.md", "file", "For a local lab, use RFC1918 example host 192.168."+"0.10 only.", 1) if len(benign) != 0 { @@ -632,6 +645,45 @@ func TestScanFileAllowsCredentialURLPlaceholders(t *testing.T) { } } +func TestScanFileAllowsCredentialURLFixtures(t *testing.T) { + got := ScanFile("fixtures/network_test.go", []byte(strings.Join([]string{ + `proxy := "http://user:pass@proxy:8080"`, + `repo := "https://u:t@h/r.git"`, + `target := "https://attacker:pw@open.feishu.cn"`, + `proxy := "http://admin:s3cret@127.0.0.1:3128"`, + `repo := "http://x-token:PAT_abc@git.host/app_x.git"`, + }, "\n")+"\n")) + for _, item := range got { + if item.Rule == "public_content_credential_url" { + t.Fatalf("credential URL fixtures should not be credential URL findings: %#v", got) + } + } +} + +func TestScanFileAllowsRootCredentialURLFixtures(t *testing.T) { + got := ScanFile("fixtures/network.md", []byte(strings.Join([]string{ + `proxy: http://user:pass@proxy:8080`, + `repo: https://u:t@h/r.git`, + }, "\n")+"\n")) + for _, item := range got { + if item.Rule == "public_content_credential_url" { + t.Fatalf("root credential URL fixtures should not be credential URL findings: %#v", got) + } + } +} + +func TestScanFileAllowsRootPrivateIPv4Fixtures(t *testing.T) { + got := ScanFile("testdata/network.md", []byte(strings.Join([]string{ + `endpoint: http://10.0.0.1:8080`, + `redis: 192.168.1.10:6379`, + }, "\n")+"\n")) + for _, item := range got { + if item.Rule == "public_content_private_ipv4" { + t.Fatalf("root private IPv4 fixtures should not be private IPv4 findings: %#v", got) + } + } +} + func TestScanFileDetectsCredentialURLsWithRedactedSubstringPasswords(t *testing.T) { got := ScanFile("docs/config.yaml", []byte("DATABASE_URL=postgres://user:notredactedreal@example.invalid/db\n")) for _, item := range got { @@ -648,6 +700,7 @@ func TestScanFileDetectsCredentialURLsWithPlaceholderUserAndRealPassword(t *test "DATABASE_URL=postgres://:real-secret@example.invalid/db", "DATABASE_URL=postgres://:" + stripeLike + "@example.invalid/db", "URL=https://:real-secret@example.invalid/path", + "REPO=https://x-token:" + stripeLike + "@git.host/app.git", }, "\n")+"\n")) var count int for _, item := range got { @@ -661,8 +714,8 @@ func TestScanFileDetectsCredentialURLsWithPlaceholderUserAndRealPassword(t *test } } } - if count != 3 { - t.Fatalf("placeholder-user credential URL findings = %d, want 3: %#v", count, got) + if count != 4 { + t.Fatalf("placeholder-user credential URL findings = %d, want 4: %#v", count, got) } } @@ -724,6 +777,68 @@ func TestScanFileAllowsBenignJSONTokenFields(t *testing.T) { } } +func TestScanFileAllowsWeakTokenFieldsWithoutCredentialEvidence(t *testing.T) { + got := ScanFile("docs/resource-tokens.md", []byte(strings.Join([]string{ + `{"token":"img_abc123"}`, + `{"token":"img_live_secret"}`, + `{"token":"img_prod_key"}`, + `token=ab********cd`, + `{"image_token":"img_live_secret"}`, + `{"data_mail_token":"mail_abc123"}`, + `{"whiteboard_token":"board_v3_example"}`, + `{"want_token":"token from callback"}`, + }, "\n")+"\n")) + for _, item := range got { + if item.Rule == "public_content_generic_credential" { + t.Fatalf("weak token fields without credential evidence should not be credential findings: %#v", got) + } + } +} + +func TestScanFileDetectsWeakTokenFieldsWithHighConfidenceCredentialValues(t *testing.T) { + githubToken := "ghp_" + "1234567890abcdef1234567890abcdef1234" + stripeToken := "sk_" + "live_1234567890abcdef" + randomToken := strings.Join([]string{ + "a1b2c3d4", + "e5f6g7h8", + "i9j0k1l2", + "m3n4p5q6", + }, "") + got := ScanFile("docs/config.md", []byte(strings.Join([]string{ + `{"token":"` + githubToken + `"}`, + `token=` + stripeToken, + `{"image_token":"` + githubToken + `"}`, + `{"token":"` + randomToken + `"}`, + }, "\n")+"\n")) + var count int + for _, item := range got { + if item.Rule == "public_content_generic_credential" { + count++ + } + } + if count != 4 { + t.Fatalf("high-confidence weak token credential findings = %d, want 4: %#v", count, got) + } +} + +func TestScanFileDetectsStrongAuthTokenKeysWithFixtureLikeValues(t *testing.T) { + got := ScanFile("docs/config.md", []byte(strings.Join([]string{ + `{"access_token":"img_abc123"}`, + `{"api_token":"img_live_secret"}`, + `{"service_token":"ab********cd"}`, + `{"bot_token":"board_v3_example"}`, + }, "\n")+"\n")) + var count int + for _, item := range got { + if item.Rule == "public_content_generic_credential" { + count++ + } + } + if count != 4 { + t.Fatalf("strong auth token key findings = %d, want 4: %#v", count, got) + } +} + func TestScanFileAllowsTestFixtureSecretValues(t *testing.T) { got := ScanFile("fixtures/calendar_meeting_test.go", []byte(`AppID: "test-app", AppSecret: "test-secret", Brand: core.BrandFeishu,`+"\n")) for _, item := range got { @@ -1052,10 +1167,12 @@ func TestScanFileDetectsCredentialShapedTokenLikePlaceholderValues(t *testing.T) } } -func TestScanFileDetectsNonFixtureMinuteTokenValues(t *testing.T) { +func TestScanFileAllowsNonFixtureResourceTokenValues(t *testing.T) { got := ScanFile("fixtures/minutes_search_test.go", []byte(`{"token":"minute_real_secret"}`+"\n")) - if !findingRules(got)["public_content_generic_credential"] { - t.Fatalf("non-fixture minute token should be credential finding: %#v", got) + for _, item := range got { + if item.Rule == "public_content_generic_credential" { + t.Fatalf("resource-like bare token value should not be credential finding: %#v", got) + } } } diff --git a/internal/registry/catalog.go b/internal/registry/catalog.go index 30a0af8c8..58c458ab9 100644 --- a/internal/registry/catalog.go +++ b/internal/registry/catalog.go @@ -6,8 +6,7 @@ package registry import "github.com/larksuite/cli/internal/apicatalog" // EmbeddedCatalog returns a navigation catalog over the embedded (overlay-free) -// metadata — deterministic across machines, for `lark-cli schema`, golden tests -// and schema lint. +// metadata — deterministic across machines, for golden tests and schema lint. func EmbeddedCatalog() apicatalog.Catalog { return apicatalog.New(apicatalog.SourceEmbedded, EmbeddedServicesTyped()) } @@ -18,3 +17,14 @@ func EmbeddedCatalog() apicatalog.Catalog { func RuntimeCatalog() apicatalog.Catalog { return apicatalog.New(apicatalog.SourceRuntime, ServicesTyped()) } + +// SchemaCatalog returns the embedded catalog when metadata is compiled in, +// otherwise the merged runtime catalog. Binaries built from the bare Go module +// embed only the empty meta_data_default.json stub, so the embedded view has +// nothing to resolve; the merged view is the only data such binaries have. +func SchemaCatalog() apicatalog.Catalog { + if len(EmbeddedServicesTyped()) > 0 { + return EmbeddedCatalog() + } + return RuntimeCatalog() +} diff --git a/internal/registry/catalog_test.go b/internal/registry/catalog_test.go new file mode 100644 index 000000000..d4f2d4a12 --- /dev/null +++ b/internal/registry/catalog_test.go @@ -0,0 +1,67 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package registry + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/larksuite/cli/internal/apicatalog" +) + +// swapEmbeddedMeta replaces the compiled-in metadata bytes for one test and +// restores them (with a full state reset) on cleanup. +func swapEmbeddedMeta(t *testing.T, data []byte) { + t.Helper() + resetInit() + orig := embeddedMetaJSON + embeddedMetaJSON = data + t.Cleanup(func() { + waitBackgroundRefresh() + embeddedMetaJSON = orig + resetInit() + }) +} + +func TestSchemaCatalog_EmbeddedWhenCompiledIn(t *testing.T) { + swapEmbeddedMeta(t, testCacheJSON("embedded_svc")) + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) + t.Setenv("LARKSUITE_CLI_REMOTE_META", "off") + + c := SchemaCatalog() + + if c.Source() != apicatalog.SourceEmbedded { + t.Fatalf("Source = %q, want %q", c.Source(), apicatalog.SourceEmbedded) + } + if _, ok := c.Service("embedded_svc"); !ok { + t.Fatal("expected embedded_svc from embedded metadata") + } +} + +// TestSchemaCatalog_FallsBackToRuntimeWhenNoEmbedded simulates a binary built +// from the bare Go module (plugin builds): only the empty meta_data_default.json +// stub is compiled in, so SchemaCatalog must serve the merged runtime view that +// Init seeds via sync fetch. +func TestSchemaCatalog_FallsBackToRuntimeWhenNoEmbedded(t *testing.T) { + swapEmbeddedMeta(t, embeddedMetaDataDefaultJSON) + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) + t.Setenv("LARKSUITE_CLI_REMOTE_META", "on") + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(200) + w.Write(testEnvelopeJSON("remote_svc")) + })) + defer ts.Close() + testMetaURL = ts.URL + + c := SchemaCatalog() + + if c.Source() != apicatalog.SourceRuntime { + t.Fatalf("Source = %q, want %q", c.Source(), apicatalog.SourceRuntime) + } + if _, ok := c.Service("remote_svc"); !ok { + t.Fatal("expected remote_svc from runtime fallback") + } +} diff --git a/internal/registry/loader.go b/internal/registry/loader.go index 813526f46..4233a4c78 100644 --- a/internal/registry/loader.go +++ b/internal/registry/loader.go @@ -15,6 +15,7 @@ import ( "github.com/larksuite/cli/internal/core" "github.com/larksuite/cli/internal/meta" + "github.com/larksuite/cli/internal/update" ) //go:embed scope_priorities.json scope_overrides.json @@ -85,7 +86,9 @@ func InitWithBrand(brand core.LarkBrand) { brandChanged := metaErr == nil && cm.Brand != "" && cm.Brand != string(brand) if !brandChanged { - if cached, err := loadCachedMerged(); err == nil { + // After a CLI upgrade the embedded data can be fresher than an old + // cache; an equal/older cache must not shadow it. + if cached, err := loadCachedMerged(); err == nil && update.IsNewer(cached.Version, embeddedVersion) { overlayMergedServices(cached) } } diff --git a/internal/registry/loader_test.go b/internal/registry/loader_test.go new file mode 100644 index 000000000..d37bb1a86 --- /dev/null +++ b/internal/registry/loader_test.go @@ -0,0 +1,102 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package registry + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" + "time" + + "github.com/larksuite/cli/internal/core" + "github.com/larksuite/cli/internal/meta" +) + +// seedCache writes a cache file + cache meta for one service whose Title is +// marker, tagged with the given top-level data version and brand. +func seedCache(t *testing.T, dir, name, marker, version, brand string) { + t.Helper() + cDir := filepath.Join(dir, "cache") + if err := os.MkdirAll(cDir, 0700); err != nil { + t.Fatal(err) + } + reg := MergedRegistry{ + Version: version, + Services: []meta.Service{{Name: name, Version: "cache", Title: marker}}, + } + data, _ := json.Marshal(reg) + if err := os.WriteFile(filepath.Join(cDir, "remote_meta.json"), data, 0644); err != nil { + t.Fatal(err) + } + cm := CacheMeta{LastCheckAt: time.Now().Unix(), Version: version, Brand: brand} + mData, _ := json.Marshal(cm) + if err := os.WriteFile(filepath.Join(cDir, "remote_meta.meta.json"), mData, 0644); err != nil { + t.Fatal(err) + } +} + +// initWithCache runs a fresh feishu-brand init with remote on, a high TTL and a +// recent LastCheckAt (so no refresh fires), embedded meta at embeddedVer and a +// pre-seeded cache at cacheVer — the overlay version gate is the only variable. +func initWithCache(t *testing.T, embeddedVer, cacheVer string) { + t.Helper() + embedded, _ := json.Marshal(MergedRegistry{ + Version: embeddedVer, + Services: []meta.Service{{Name: "svc", Version: "embedded", Title: "EMBEDDED"}}, + }) + swapEmbeddedMeta(t, embedded) + tmp := t.TempDir() + t.Setenv("LARKSUITE_CLI_CONFIG_DIR", tmp) + t.Setenv("LARKSUITE_CLI_REMOTE_META", "on") + t.Setenv("LARKSUITE_CLI_META_TTL", "3600") + seedCache(t, tmp, "svc", "CACHE", cacheVer, "feishu") + InitWithBrand(core.BrandFeishu) +} + +func titleOf(t *testing.T, name string) string { + t.Helper() + svc, ok := ServiceTyped(name) + if !ok { + t.Fatalf("service %q not loaded", name) + } + return svc.Title +} + +func TestOverlayGate_EqualVersion_UsesEmbedded(t *testing.T) { + initWithCache(t, "1.0.0", "1.0.0") + if got := titleOf(t, "svc"); got != "EMBEDDED" { + t.Errorf("equal version: got %q, want EMBEDDED (cache must not overlay)", got) + } +} + +func TestOverlayGate_OlderCache_UsesEmbedded(t *testing.T) { + initWithCache(t, "2.0.0", "1.0.0") + if got := titleOf(t, "svc"); got != "EMBEDDED" { + t.Errorf("older cache: got %q, want EMBEDDED", got) + } +} + +func TestOverlayGate_NewerCache_OverlaysCache(t *testing.T) { + initWithCache(t, "1.0.0", "2.0.0") + if got := titleOf(t, "svc"); got != "CACHE" { + t.Errorf("newer cache: got %q, want CACHE", got) + } +} + +func TestOverlayGate_UnparseableCacheVersion_UsesEmbedded(t *testing.T) { + initWithCache(t, "1.0.0", "not-a-semver") + if got := titleOf(t, "svc"); got != "EMBEDDED" { + t.Errorf("unparseable cache version: got %q, want EMBEDDED", got) + } +} + +func TestOverlayGate_StubEmbedded_OverlaysRealCache(t *testing.T) { + // The bare-module stub baseline is "0.0.0"; a real cache version must win so + // plugin builds without compiled meta_data.json still get remote data. + initWithCache(t, "0.0.0", "1.0.0") + if got := titleOf(t, "svc"); got != "CACHE" { + t.Errorf("stub-embedded baseline: got %q, want CACHE", got) + } +} diff --git a/internal/registry/remote_test.go b/internal/registry/remote_test.go index 98c2407df..15c7281c7 100644 --- a/internal/registry/remote_test.go +++ b/internal/registry/remote_test.go @@ -72,9 +72,11 @@ func hasEmbeddedServices() bool { } // testRegistry returns a minimal MergedRegistry with one service. +// The version is a real semver newer than the embedded stub baseline ("0.0.0") +// so cache overlay passes the version gate in InitWithBrand. func testRegistry(name string) MergedRegistry { return MergedRegistry{ - Version: "test-1.0", + Version: "1.0.0", Services: []meta.Service{ { Name: name, @@ -160,7 +162,7 @@ func TestRemoteOff_SkipsRemoteLogic(t *testing.T) { } func TestCacheHit_WithinTTL(t *testing.T) { - resetInit() + swapEmbeddedMeta(t, nil) // overlay must depend only on the cache version, not the ambient embedded meta tmp := t.TempDir() t.Setenv("LARKSUITE_CLI_CONFIG_DIR", tmp) t.Setenv("LARKSUITE_CLI_REMOTE_META", "on") @@ -197,7 +199,7 @@ func TestCacheHit_WithinTTL(t *testing.T) { } func TestNetworkError_SilentDegradation(t *testing.T) { - resetInit() + swapEmbeddedMeta(t, nil) // overlay must depend only on the cache version, not the ambient embedded meta tmp := t.TempDir() t.Setenv("LARKSUITE_CLI_CONFIG_DIR", tmp) t.Setenv("LARKSUITE_CLI_REMOTE_META", "on") @@ -371,8 +373,8 @@ func TestFetchRemoteMerged_200(t *testing.T) { if data == nil { t.Fatal("expected non-nil data") } - if reg.Version != "test-1.0" { - t.Errorf("expected version test-1.0, got %s", reg.Version) + if reg.Version != "1.0.0" { + t.Errorf("expected version 1.0.0, got %s", reg.Version) } } diff --git a/internal/registry/scope_hint.go b/internal/registry/scope_hint.go index 5e7ecbf1c..c1af42d9f 100644 --- a/internal/registry/scope_hint.go +++ b/internal/registry/scope_hint.go @@ -59,13 +59,9 @@ func BuildConsoleScopeURL(brand core.LarkBrand, appID, scope string) string { if appID == "" || scope == "" { return "" } - host := "open.feishu.cn" - if brand == core.BrandLark { - host = "open.larksuite.com" - } return fmt.Sprintf( - "https://%s/page/scope-apply?clientID=%s&scopes=%s", - host, + "%s/page/scope-apply?clientID=%s&scopes=%s", + core.ResolveOpenBaseURL(brand), url.QueryEscape(appID), url.QueryEscape(scope), ) diff --git a/internal/selfupdate/updater.go b/internal/selfupdate/updater.go index 9304f7c3e..4b8f93a18 100644 --- a/internal/selfupdate/updater.go +++ b/internal/selfupdate/updater.go @@ -32,6 +32,7 @@ type InstallMethod int const ( InstallNpm InstallMethod = iota + InstallPnpm InstallManual ) @@ -53,22 +54,32 @@ var ( // DetectResult holds installation detection results. type DetectResult struct { - Method InstallMethod - ResolvedPath string - NpmAvailable bool + Method InstallMethod + ResolvedPath string + NpmAvailable bool + PnpmAvailable bool } // CanAutoUpdate returns true if the CLI can update itself automatically. func (d DetectResult) CanAutoUpdate() bool { - return d.Method == InstallNpm && d.NpmAvailable + switch d.Method { + case InstallNpm: + return d.NpmAvailable + case InstallPnpm: + return d.PnpmAvailable + } + return false } // ManualReason returns a human-readable explanation of why auto-update is unavailable. func (d DetectResult) ManualReason() string { - if d.Method == InstallNpm && !d.NpmAvailable { + switch { + case d.Method == InstallNpm && !d.NpmAvailable: return "installed via npm, but npm is not available in PATH" + case d.Method == InstallPnpm && !d.PnpmAvailable: + return "installed via pnpm, but pnpm is not available in PATH" } - return "not installed via npm" + return "not installed via npm or pnpm" } // NpmResult holds the result of an npm install or skills update execution. @@ -92,6 +103,7 @@ func (r *NpmResult) CombinedOutput() string { type Updater struct { DetectOverride func() DetectResult NpmInstallOverride func(version string) *NpmResult + PnpmInstallOverride func(version string) *NpmResult SkillsIndexFetchOverride func() *NpmResult SkillsCommandOverride func(args ...string) *NpmResult VerifyOverride func(expectedVersion string) error @@ -101,17 +113,38 @@ type Updater struct { // running binary is successfully renamed to .old. Used by // CanRestorePreviousVersion to report whether rollback is possible. backupCreated bool + + // detectCache memoizes the first real DetectInstallMethod result. How this + // binary was installed cannot change during a single process, so caching is + // the correct semantics — and it is required for correctness: the update + // flow mutates the install (pnpm add -g / npm install -g) before syncing + // skills, so a re-detection at skills time could resolve a now-stale + // os.Executable path and misclassify. Seeded pre-update by the first call + // (updateRun), it keeps the post-update skills launcher consistent with the + // launcher reported to the user. Not goroutine-safe; the update flow is + // sequential. + detectCache *DetectResult } // New creates an Updater with default (real) behavior. func New() *Updater { return &Updater{} } -// DetectInstallMethod determines how the CLI was installed and whether -// npm is available for auto-update. +// DetectInstallMethod determines how the CLI was installed and whether the +// owning package manager is available for auto-update. func (u *Updater) DetectInstallMethod() DetectResult { if u.DetectOverride != nil { return u.DetectOverride() } + if u.detectCache != nil { + return *u.detectCache + } + result := u.detectInstallMethod() + u.detectCache = &result + return result +} + +// detectInstallMethod performs the real (uncached) detection. +func (u *Updater) detectInstallMethod() DetectResult { exe, err := vfs.Executable() if err != nil { return DetectResult{Method: InstallManual} @@ -120,24 +153,54 @@ func (u *Updater) DetectInstallMethod() DetectResult { if err != nil { return DetectResult{Method: InstallManual, ResolvedPath: exe} } + _, npmErr := exec.LookPath("npm") + _, pnpmErr := exec.LookPath("pnpm") + return detectFromResolved(resolved, npmErr == nil, pnpmErr == nil) +} +// detectFromResolved classifies the resolved binary path into an install +// method and records package-manager availability. Split out from +// DetectInstallMethod so the classification is unit-testable without touching +// the filesystem or PATH. +func detectFromResolved(resolved string, npmOnPath, pnpmOnPath bool) DetectResult { method := InstallManual if strings.Contains(resolved, "node_modules") { - method = InstallNpm - } - - npmAvailable := false - if method == InstallNpm { - if _, err := exec.LookPath("npm"); err == nil { - npmAvailable = true + if containsPnpmMarker(resolved) { + method = InstallPnpm + } else { + method = InstallNpm } } - - return DetectResult{ - Method: method, - ResolvedPath: resolved, - NpmAvailable: npmAvailable, + d := DetectResult{Method: method, ResolvedPath: resolved} + switch method { + case InstallNpm: + d.NpmAvailable = npmOnPath + case InstallPnpm: + d.PnpmAvailable = pnpmOnPath } + return d +} + +// containsPnpmMarker reports whether the resolved binary path belongs to a +// pnpm-managed install. pnpm exposes two layouts: the classic virtual store +// (a ".pnpm" directory segment) and the global content-addressable store, +// whose resolved path runs through pnpm's home directory (e.g. +// "~/Library/pnpm/store/v11/links/...") — a "pnpm" segment immediately +// followed by "store". Matching only these two shapes (rather than any bare +// "pnpm" segment) avoids misclassifying an npm install that merely lives under +// a directory named "pnpm". Windows separators are normalized to "/" so the +// classification is OS-independent and unit-testable anywhere. +func containsPnpmMarker(p string) bool { + parts := strings.Split(strings.ReplaceAll(p, `\`, "/"), "/") + for i, part := range parts { + if part == ".pnpm" { + return true + } + if part == "pnpm" && i+1 < len(parts) && parts[i+1] == "store" { + return true + } + } + return false } // RunNpmInstall executes npm install -g @larksuite/cli@. @@ -163,6 +226,29 @@ func (u *Updater) RunNpmInstall(version string) *NpmResult { return r } +// RunPnpmInstall executes pnpm add -g @larksuite/cli@. +func (u *Updater) RunPnpmInstall(version string) *NpmResult { + if u.PnpmInstallOverride != nil { + return u.PnpmInstallOverride(version) + } + r := &NpmResult{} + pnpmPath, err := exec.LookPath("pnpm") + if err != nil { + r.Err = fmt.Errorf("pnpm not found in PATH: %w", err) + return r + } + ctx, cancel := context.WithTimeout(context.Background(), npmInstallTimeout) + defer cancel() + cmd := exec.CommandContext(ctx, pnpmPath, "add", "-g", NpmPackage+"@"+version) + cmd.Stdout = &r.Stdout + cmd.Stderr = &r.Stderr + r.Err = cmd.Run() + if ctx.Err() == context.DeadlineExceeded { + r.Err = fmt.Errorf("pnpm install timed out after %s", npmInstallTimeout) + } + return r +} + func (u *Updater) ListOfficialSkillsIndex() *NpmResult { if u.SkillsIndexFetchOverride != nil { return u.SkillsIndexFetchOverride() @@ -261,19 +347,40 @@ func (u *Updater) runSkillsInstall(source string, nameList []string) *NpmResult return u.runSkillsCommand(args...) } +// skillsInvocation decides how to launch the `skills` CLI. When the lark-cli +// itself was installed via pnpm and pnpm is available, it uses `pnpm dlx` so +// pnpm-only environments (pnpm's standalone installer bundles Node without +// putting npm/npx on PATH) can still sync skills after a self-update. +// Otherwise it uses `npx`. The npx auto-confirm flag "-y", when present as the +// leading arg, maps to `pnpm dlx`'s default non-interactive behavior and is +// dropped for the pnpm launcher. Kept pure (no exec/PATH access) so the +// launcher selection is unit-testable on any platform. +func skillsInvocation(method InstallMethod, pnpmAvailable bool, args []string) (launcher string, rest []string) { + if method == InstallPnpm && pnpmAvailable { + r := args + if len(r) > 0 && r[0] == "-y" { + r = r[1:] + } + return "pnpm", append([]string{"dlx"}, r...) + } + return "npx", args +} + func (u *Updater) runSkillsCommand(args ...string) *NpmResult { if u.SkillsCommandOverride != nil { return u.SkillsCommandOverride(args...) } r := &NpmResult{} - npxPath, err := exec.LookPath("npx") + det := u.DetectInstallMethod() + launcher, cmdArgs := skillsInvocation(det.Method, det.PnpmAvailable, args) + binPath, err := exec.LookPath(launcher) if err != nil { - r.Err = fmt.Errorf("npx not found in PATH: %w", err) + r.Err = fmt.Errorf("%s not found in PATH: %w", launcher, err) return r } ctx, cancel := context.WithTimeout(context.Background(), skillsUpdateTimeout) defer cancel() - cmd := exec.CommandContext(ctx, npxPath, args...) + cmd := exec.CommandContext(ctx, binPath, cmdArgs...) cmd.Stdout = &r.Stdout cmd.Stderr = &r.Stderr r.Err = cmd.Run() diff --git a/internal/selfupdate/updater_test.go b/internal/selfupdate/updater_test.go index 65426eeb1..93176265e 100644 --- a/internal/selfupdate/updater_test.go +++ b/internal/selfupdate/updater_test.go @@ -371,3 +371,147 @@ func TestListOfficialSkillsFallsBack(t *testing.T) { t.Fatalf("fallback call = %q, want larksuite/cli --list", called[1]) } } + +func TestContainsPnpmMarker(t *testing.T) { + cases := []struct { + path string + want bool + }{ + // Classic virtual-store layout (.pnpm segment). + {"/Users/x/Library/pnpm/global/5/node_modules/.pnpm/@larksuite+cli@1.0.44/node_modules/@larksuite/cli/bin/lark-cli", true}, + {`C:\Users\x\AppData\Local\pnpm\global\5\node_modules\.pnpm\@larksuite+cli@1.0.44\node_modules\@larksuite\cli\bin\lark-cli.exe`, true}, + // Global content-addressable store layout (pnpm 11): resolved path runs + // through the pnpm home store, a "pnpm" segment with no ".pnpm". + {"/Users/x/Library/pnpm/store/v11/links/@larksuite/cli/1.0.59/abc123/node_modules/@larksuite/cli/bin/lark-cli", true}, + {"/home/x/.local/share/pnpm/store/v10/@larksuite/cli/node_modules/@larksuite/cli/bin/lark-cli", true}, + {`C:\Users\x\AppData\Local\pnpm\store\v11\links\@larksuite\cli\node_modules\@larksuite\cli\bin\lark-cli.exe`, true}, + // npm and non-package installs — no pnpm/.pnpm segment. + {"/usr/local/lib/node_modules/@larksuite/cli/bin/lark-cli", false}, + {"/usr/local/bin/lark-cli", false}, + // Substrings that must NOT match: segment must be exactly .pnpm, or + // "pnpm" immediately followed by "store". + {"/opt/homebrew/.pnpmfoo/node_modules/@larksuite/cli/bin/lark-cli", false}, + {"/opt/pnpmfoo/node_modules/@larksuite/cli/bin/lark-cli", false}, + // A bare "pnpm" directory NOT followed by "store" (e.g. an npm install + // living under a dir named pnpm) must not be misclassified as pnpm. + {"/opt/pnpm/lib/node_modules/@larksuite/cli/bin/lark-cli", false}, + } + for _, c := range cases { + if got := containsPnpmMarker(c.path); got != c.want { + t.Errorf("containsPnpmMarker(%q) = %v, want %v", c.path, got, c.want) + } + } +} + +func TestDetectInstallMethod_Pnpm(t *testing.T) { + u := &Updater{DetectOverride: nil} + u.DetectOverride = func() DetectResult { + // Exercise the real classification by feeding a resolved path via a small shim. + return detectFromResolved("/x/node_modules/.pnpm/@larksuite+cli@1.0.44/node_modules/@larksuite/cli/bin/lark-cli", true, true) + } + got := u.DetectInstallMethod() + if got.Method != InstallPnpm { + t.Errorf("Method = %v, want InstallPnpm", got.Method) + } + if !got.PnpmAvailable { + t.Errorf("PnpmAvailable = false, want true") + } +} + +func TestDetectInstallMethod_NpmVsManual(t *testing.T) { + if m := detectFromResolved("/usr/local/lib/node_modules/@larksuite/cli/bin/lark-cli", true, false).Method; m != InstallNpm { + t.Errorf("npm path Method = %v, want InstallNpm", m) + } + if m := detectFromResolved("/usr/local/bin/lark-cli", false, false).Method; m != InstallManual { + t.Errorf("manual path Method = %v, want InstallManual", m) + } +} + +func TestCanAutoUpdate_Pnpm(t *testing.T) { + if !(DetectResult{Method: InstallPnpm, PnpmAvailable: true}).CanAutoUpdate() { + t.Error("pnpm available should CanAutoUpdate") + } + if (DetectResult{Method: InstallPnpm, PnpmAvailable: false}).CanAutoUpdate() { + t.Error("pnpm unavailable should not CanAutoUpdate") + } +} + +func TestManualReason_Pnpm(t *testing.T) { + if got := (DetectResult{Method: InstallPnpm, NpmAvailable: false, PnpmAvailable: false}).ManualReason(); got != "installed via pnpm, but pnpm is not available in PATH" { + t.Errorf("pnpm reason = %q", got) + } + if got := (DetectResult{Method: InstallManual}).ManualReason(); got != "not installed via npm or pnpm" { + t.Errorf("manual reason = %q", got) + } +} + +func TestRunPnpmInstall_Override(t *testing.T) { + u := &Updater{PnpmInstallOverride: func(version string) *NpmResult { + r := &NpmResult{} + r.Stdout.WriteString("added @larksuite/cli@" + version) + return r + }} + got := u.RunPnpmInstall("2.0.0") + if got.Err != nil { + t.Fatalf("unexpected err: %v", got.Err) + } + if !strings.Contains(got.CombinedOutput(), "2.0.0") { + t.Errorf("output = %q, want version echoed", got.CombinedOutput()) + } +} + +func TestRunPnpmInstall_Error(t *testing.T) { + wantErr := errors.New("boom") + u := &Updater{PnpmInstallOverride: func(string) *NpmResult { return &NpmResult{Err: wantErr} }} + if got := u.RunPnpmInstall("2.0.0"); !errors.Is(got.Err, wantErr) { + t.Errorf("err = %v, want %v", got.Err, wantErr) + } +} + +func TestSkillsInvocation(t *testing.T) { + addArgs := []string{"-y", "skills", "add", "https://open.feishu.cn", "-g", "-y"} + cases := []struct { + name string + method InstallMethod + pnpmAvailable bool + args []string + wantLauncher string + wantRest []string + }{ + {"pnpm install + pnpm available → pnpm dlx, drop leading -y", InstallPnpm, true, addArgs, + "pnpm", []string{"dlx", "skills", "add", "https://open.feishu.cn", "-g", "-y"}}, + {"pnpm install but pnpm unavailable → npx unchanged", InstallPnpm, false, addArgs, + "npx", addArgs}, + {"npm install → npx unchanged", InstallNpm, false, addArgs, + "npx", addArgs}, + {"manual install → npx unchanged", InstallManual, false, []string{"-y", "skills", "ls", "-g"}, + "npx", []string{"-y", "skills", "ls", "-g"}}, + {"pnpm without a leading -y → prepend dlx only", InstallPnpm, true, []string{"skills", "ls", "-g"}, + "pnpm", []string{"dlx", "skills", "ls", "-g"}}, + } + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + gotLauncher, gotRest := skillsInvocation(c.method, c.pnpmAvailable, c.args) + if gotLauncher != c.wantLauncher { + t.Errorf("launcher = %q, want %q", gotLauncher, c.wantLauncher) + } + if strings.Join(gotRest, " ") != strings.Join(c.wantRest, " ") { + t.Errorf("rest = %v, want %v", gotRest, c.wantRest) + } + }) + } +} + +// TestDetectInstallMethod_Caches locks the fix for the post-update re-detection +// hazard: DetectInstallMethod must return the first (pre-update) detection on +// subsequent calls, so the skills launcher chosen after the binary is replaced +// stays consistent with what was detected — and reported — before the update. +func TestDetectInstallMethod_Caches(t *testing.T) { + u := New() + cached := DetectResult{Method: InstallPnpm, PnpmAvailable: true, ResolvedPath: "/x/pnpm/store/v11/links/@larksuite/cli/1.0.0/node_modules/@larksuite/cli/bin/lark-cli"} + u.detectCache = &cached + got := u.DetectInstallMethod() + if got.Method != InstallPnpm || !got.PnpmAvailable { + t.Errorf("expected cached pnpm result to be returned, got %+v", got) + } +} diff --git a/internal/update/update.go b/internal/update/update.go index 31fef085e..7bdc61d9c 100644 --- a/internal/update/update.go +++ b/internal/update/update.go @@ -25,7 +25,7 @@ import ( const ( registryURL = "https://registry.npmjs.org/@larksuite/cli/latest" cacheTTL = 24 * time.Hour - fetchTimeout = 5 * time.Second + fetchTimeout = 15 * time.Second stateFile = "update-state.json" maxBody = 256 << 10 // 256 KB diff --git a/package.json b/package.json index 4669aa30e..5b46ead5b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@larksuite/cli", - "version": "1.0.63", + "version": "1.0.66", "description": "The official CLI for Lark/Feishu open platform", "bin": { "lark-cli": "scripts/run.js" diff --git a/scripts/ci-workflow.test.sh b/scripts/ci-workflow.test.sh index b8bdcd989..1ff3bf31b 100644 --- a/scripts/ci-workflow.test.sh +++ b/scripts/ci-workflow.test.sh @@ -215,6 +215,73 @@ if ! grep -Fq "if: \${{ $fork_safe_guard }}" <<<"$section"; then exit 1 fi +if ! grep -Fq "name: Resolve CLI E2E domains" <<<"$dry_run_section" || + ! grep -Fq "id: e2e_domains" <<<"$dry_run_section" || + ! grep -Fq "run: node scripts/e2e_domains.js" <<<"$dry_run_section"; then + echo "e2e-dry-run should resolve changed-file CLI E2E domains before running tests" + exit 1 +fi + +if ! grep -Fq "steps.e2e_domains.outputs.dry_packages" <<<"$dry_run_section"; then + echo "e2e-dry-run should use resolved dry_packages instead of always running the full suite" + exit 1 +fi + +if ! grep -Fq "E2E_REASON: \${{ steps.e2e_domains.outputs.reason }}" <<<"$dry_run_section" || + ! grep -Fq 'echo "Dry-run CLI E2E domains: $E2E_MODE ($E2E_REASON)"' <<<"$dry_run_section"; then + echo "e2e-dry-run should pass dynamic domain output through env before shell use" + exit 1 +fi + +if ! grep -Fq "E2E_DRY_ROOT_PACKAGE: \${{ steps.e2e_domains.outputs.dry_root_package }}" <<<"$dry_run_section" || + ! grep -Fq 'go test -v -count=1 -timeout=5m "$E2E_DRY_ROOT_PACKAGE"' <<<"$dry_run_section"; then + echo "e2e-dry-run should run the root CLI E2E harness package without the DryRun/Regression filter" + exit 1 +fi + +if ! grep -Fq "No dry-run CLI E2E needed" <<<"$dry_run_section"; then + echo "e2e-dry-run should explicitly skip when domain mode is skip" + exit 1 +fi + +if ! grep -Fq "name: Resolve CLI E2E domains" <<<"$section" || + ! grep -Fq "id: e2e_domains" <<<"$section" || + ! grep -Fq "run: node scripts/e2e_domains.js" <<<"$section"; then + echo "e2e-live should resolve changed-file CLI E2E domains before credentials and tests" + exit 1 +fi + +if ! grep -Fq "steps.e2e_domains.outputs.live_packages" <<<"$section"; then + echo "e2e-live should use resolved live_packages instead of always running the full suite" + exit 1 +fi + +if ! grep -Fq "E2E_REASON: \${{ steps.e2e_domains.outputs.reason }}" <<<"$section" || + ! grep -Fq 'echo "Live CLI E2E domains: $E2E_MODE ($E2E_REASON)"' <<<"$section"; then + echo "e2e-live should pass dynamic domain output through env before shell use" + exit 1 +fi + +if ! awk ' + /^ - name: Build lark-cli/ { in_step = 1 } + in_step && /if: \$\{\{ steps\.e2e_domains\.outputs\.mode != '\''skip'\'' \}\}/ { found = 1 } + in_step && /^ - name:/ && !/Build lark-cli/ { in_step = 0 } + END { exit found ? 0 : 1 } +' <<<"$dry_run_section"; then + echo "e2e-dry-run should skip building lark-cli when domain mode is skip" + exit 1 +fi + +if ! awk ' + /^ - name: Build lark-cli/ { in_step = 1 } + in_step && /if: \$\{\{ steps\.e2e_domains\.outputs\.mode != '\''skip'\'' \}\}/ { found = 1 } + in_step && /^ - name:/ && !/Build lark-cli/ { in_step = 0 } + END { exit found ? 0 : 1 } +' <<<"$section"; then + echo "e2e-live should skip building lark-cli when domain mode is skip" + exit 1 +fi + if ! grep -Fq "permissions:" <<<"$section" || ! grep -Fq "contents: read" <<<"$section" || ! grep -Fq "checks: write" <<<"$section"; then @@ -237,13 +304,23 @@ if ! grep -Fq "::error::Missing required secrets: TEST_BOT1_APP_ID / TEST_BOT1_A exit 1 fi +if ! awk ' + /^ - name: Configure bot credentials/ { in_step = 1 } + in_step && /if: \$\{\{ steps\.e2e_domains\.outputs\.mode != '\''skip'\'' \}\}/ { found = 1 } + in_step && /^ - name:/ && !/Configure bot credentials/ { in_step = 0 } + END { exit found ? 0 : 1 } +' <<<"$section"; then + echo "e2e-live should only configure bot credentials when domain mode is not skip" + exit 1 +fi + if grep -Fq "steps.live_e2e_credentials.outputs.configured" <<<"$section"; then echo "e2e-live build, configure, test, and report steps should not be gated by a skip-state output" exit 1 fi -if ! grep -Fq "if: \${{ !cancelled() }}" <<<"$section"; then - echo "e2e-live report step should run after attempted live tests unless the workflow is cancelled" +if ! grep -Fq "if: \${{ !cancelled() && steps.e2e_domains.outputs.mode != 'skip' }}" <<<"$section"; then + echo "e2e-live report step should run after attempted live tests unless the workflow is cancelled or domain mode is skip" exit 1 fi diff --git a/scripts/domain-map.js b/scripts/domain-map.js new file mode 100644 index 000000000..abdbcd368 --- /dev/null +++ b/scripts/domain-map.js @@ -0,0 +1,54 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +const fs = require("node:fs"); +const path = require("node:path"); + +const DOMAIN_MAP_PATH = path.join(__dirname, "domain-map.json"); +const domainMap = JSON.parse(fs.readFileSync(DOMAIN_MAP_PATH, "utf8")); + +function normalizeRepoPath(input) { + return String(input || "").trim().replace(/\\/g, "/").replace(/^\.\//, "").toLowerCase(); +} + +const pathMappingsBySpecificity = (domainMap.pathMappings || []) + .map((entry) => ({ ...entry, prefix: normalizeRepoPath(entry.prefix) })) + .sort((a, b) => b.prefix.length - a.prefix.length); + +function findPathMapping(filePath) { + const normalized = normalizeRepoPath(filePath); + return pathMappingsBySpecificity.find((entry) => normalized.startsWith(entry.prefix)); +} + +function labelDomainsForPath(filePath) { + const mapping = findPathMapping(filePath); + return mapping ? [...(mapping.labelDomains || [])] : []; +} + +function e2eDomainsForPath(filePath) { + const mapping = findPathMapping(filePath); + return mapping ? [...(mapping.e2eDomains || [])] : []; +} + +function matchesFullFallback(filePath) { + const normalized = normalizeRepoPath(filePath); + return (domainMap.fullFallbackPrefixes || []).some((prefix) => normalized.startsWith(prefix)); +} + +function isSkippablePath(filePath) { + const normalized = normalizeRepoPath(filePath); + const basename = path.posix.basename(normalized); + return (domainMap.skipPrefixes || []).some((prefix) => normalized.startsWith(prefix)) + || (domainMap.skipSuffixes || []).some((suffix) => normalized.endsWith(suffix)) + || (domainMap.skipFilenames || []).includes(basename); +} + +module.exports = { + domainMap, + e2eDomainsForPath, + findPathMapping, + isSkippablePath, + labelDomainsForPath, + matchesFullFallback, + normalizeRepoPath, +}; diff --git a/scripts/domain-map.json b/scripts/domain-map.json new file mode 100644 index 000000000..e7e37fd22 --- /dev/null +++ b/scripts/domain-map.json @@ -0,0 +1,71 @@ +{ + "pathMappings": [ + { "prefix": "shortcuts/im/", "labelDomains": ["im"], "e2eDomains": ["im"] }, + { "prefix": "shortcuts/vc/", "labelDomains": ["vc"], "e2eDomains": ["vc"] }, + { "prefix": "shortcuts/calendar/", "labelDomains": ["calendar"], "e2eDomains": ["calendar"] }, + { "prefix": "shortcuts/doc/", "labelDomains": ["ccm"], "e2eDomains": ["docs"] }, + { "prefix": "shortcuts/sheets/", "labelDomains": ["ccm"], "e2eDomains": ["sheets"] }, + { "prefix": "shortcuts/drive/", "labelDomains": ["ccm"], "e2eDomains": ["drive"] }, + { "prefix": "shortcuts/wiki/", "labelDomains": ["ccm"], "e2eDomains": ["wiki"] }, + { "prefix": "shortcuts/base/", "labelDomains": ["base"], "e2eDomains": ["base"] }, + { "prefix": "shortcuts/mail/", "labelDomains": ["mail"], "e2eDomains": ["mail"] }, + { "prefix": "shortcuts/task/", "labelDomains": ["task"], "e2eDomains": ["task"] }, + { "prefix": "shortcuts/contact/", "labelDomains": ["contact"], "e2eDomains": ["contact"] }, + { "prefix": "shortcuts/apps/", "labelDomains": [], "e2eDomains": ["apps"] }, + { "prefix": "shortcuts/markdown/", "labelDomains": [], "e2eDomains": ["markdown"] }, + { "prefix": "shortcuts/minutes/", "labelDomains": [], "e2eDomains": ["minutes"] }, + { "prefix": "shortcuts/okr/", "labelDomains": [], "e2eDomains": ["okr"] }, + { "prefix": "shortcuts/slides/", "labelDomains": [], "e2eDomains": ["slides"] }, + { "prefix": "shortcuts/note/", "labelDomains": [], "e2eDomains": ["note"] }, + { "prefix": "shortcuts/event/", "labelDomains": [], "e2eDomains": ["event"] }, + + { "prefix": "skills/lark-im/", "labelDomains": ["im"], "e2eDomains": ["im"] }, + { "prefix": "skills/lark-vc/", "labelDomains": ["vc"], "e2eDomains": ["vc"] }, + { "prefix": "skills/lark-doc/", "labelDomains": ["ccm"], "e2eDomains": ["docs"] }, + { "prefix": "skills/lark-wiki/", "labelDomains": ["ccm"], "e2eDomains": ["wiki"] }, + { "prefix": "skills/lark-drive/", "labelDomains": ["ccm"], "e2eDomains": ["drive"] }, + { "prefix": "skills/lark-sheets/", "labelDomains": ["ccm"], "e2eDomains": ["sheets"] }, + { "prefix": "skills/lark-base/", "labelDomains": ["base"], "e2eDomains": ["base"] }, + { "prefix": "skills/lark-mail/", "labelDomains": ["mail"], "e2eDomains": ["mail"] }, + { "prefix": "skills/lark-calendar/", "labelDomains": ["calendar"], "e2eDomains": ["calendar"] }, + { "prefix": "skills/lark-task/", "labelDomains": ["task"], "e2eDomains": ["task"] }, + { "prefix": "skills/lark-contact/", "labelDomains": ["contact"], "e2eDomains": ["contact"] }, + { "prefix": "skills/lark-apps/", "labelDomains": [], "e2eDomains": ["apps"] }, + { "prefix": "skills/lark-markdown/", "labelDomains": [], "e2eDomains": ["markdown"] }, + { "prefix": "skills/lark-minutes/", "labelDomains": [], "e2eDomains": ["minutes"] }, + { "prefix": "skills/lark-okr/", "labelDomains": [], "e2eDomains": ["okr"] }, + { "prefix": "skills/lark-slides/", "labelDomains": [], "e2eDomains": ["slides"] }, + { "prefix": "skills/lark-note/", "labelDomains": [], "e2eDomains": ["note"] }, + { "prefix": "skills/lark-event/", "labelDomains": [], "e2eDomains": ["event"] } + ], + "fullFallbackPrefixes": [ + "shortcuts/common/", + "cmd/", + "internal/", + "pkg/", + "extension/", + "registry/", + "go.mod", + "go.sum", + "Makefile", + ".github/workflows/", + "scripts/" + ], + "skipPrefixes": [ + "docs/", + ".changeset/" + ], + "skipSuffixes": [ + ".md", + ".mdx", + ".txt", + ".rst" + ], + "skipFilenames": [ + "readme.md", + "readme.zh.md", + "changelog.md", + "license", + "cla.md" + ] +} diff --git a/scripts/e2e_domains.js b/scripts/e2e_domains.js new file mode 100644 index 000000000..26c8305ea --- /dev/null +++ b/scripts/e2e_domains.js @@ -0,0 +1,224 @@ +#!/usr/bin/env node +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +const fs = require("node:fs"); +const path = require("node:path"); +const { execFileSync } = require("node:child_process"); +const { + e2eDomainsForPath, + findPathMapping, + isSkippablePath, + matchesFullFallback, + normalizeRepoPath, +} = require("./domain-map"); + +const ROOT = process.env.E2E_DOMAINS_ROOT || path.join(__dirname, ".."); +process.chdir(ROOT); + +function execLines(command, args) { + return execFileSync(command, args, { encoding: "utf8" }) + .split(/\r?\n/) + .map((line) => line.trim()) + .filter(Boolean); +} + +function modulePath() { + return execLines("go", ["list", "-m"])[0]; +} + +function rootPackage(moduleName) { + return `${moduleName}/tests/cli_e2e`; +} + +function allLivePackages(moduleName) { + return execLines("go", ["list", "./tests/cli_e2e/..."]) + .filter((pkg) => pkg !== rootPackage(moduleName)) + .filter((pkg) => !pkg.endsWith("/demo")); +} + +function allDryPackages(moduleName) { + return allLivePackages(moduleName); +} + +const domainExistsCache = new Map(); + +function domainExists(domain) { + if (domainExistsCache.has(domain)) { + return domainExistsCache.get(domain); + } + let exists = false; + try { + execFileSync("go", ["list", `./tests/cli_e2e/${domain}`], { stdio: "ignore" }); + exists = true; + } catch { + exists = false; + } + domainExistsCache.set(domain, exists); + return exists; +} + +function readChangedFiles() { + const changedFilesPath = process.env.E2E_DOMAIN_CHANGED_FILES; + if (changedFilesPath) { + return fs.readFileSync(changedFilesPath, "utf8") + .split(/\r?\n/) + .map(normalizeRepoPath) + .filter(Boolean); + } + + if (process.env.GITHUB_EVENT_NAME !== "pull_request") { + return null; + } + + const baseRef = process.env.GITHUB_BASE_REF || "main"; + try { + execFileSync("git", ["rev-parse", "--verify", `origin/${baseRef}`], { stdio: "ignore" }); + return execLines("git", ["diff", "--name-only", `origin/${baseRef}...HEAD`]).map(normalizeRepoPath); + } catch { + return null; + } +} + +function addDomain(domains, domain) { + if (domain && domainExists(domain)) { + domains.add(domain); + return true; + } + return false; +} + +function classifyPath(filePath, domains) { + const normalized = normalizeRepoPath(filePath); + if (!normalized) return { matched: false }; + + const e2eMatch = normalized.match(/^tests\/cli_e2e\/([^/]+)\//); + if (e2eMatch) { + const domain = e2eMatch[1]; + if (domain === "demo") return { matched: false }; + if (domainExists(domain)) { + addDomain(domains, domain); + return { matched: true }; + } + if (isSkippablePath(normalized)) return { matched: false }; + return { fullReason: `unknown CLI E2E domain path: ${normalized}` }; + } + + if (normalized.startsWith("tests/cli_e2e/")) { + return { fullReason: `shared CLI E2E harness changed: ${normalized}` }; + } + + if (matchesFullFallback(normalized)) { + return { fullReason: `shared/runtime path changed: ${normalized}` }; + } + + const mappedDomains = e2eDomainsForPath(normalized); + if (mappedDomains.length > 0) { + const missingDomains = []; + for (const domain of mappedDomains) { + if (!addDomain(domains, domain)) missingDomains.push(domain); + } + if (missingDomains.length > 0) { + return { fullReason: `mapped CLI E2E domain has no package: ${missingDomains.join(",")} (${normalized})` }; + } + return { matched: true }; + } + + if (findPathMapping(normalized)) { + return { fullReason: `mapped path has no CLI E2E package: ${normalized}` }; + } + + if (normalized.match(/^shortcuts\/[^/]+\//) || normalized.match(/^skills\/lark-[^/]+\//)) { + return { fullReason: `unmapped CLI E2E domain path: ${normalized}` }; + } + + if (isSkippablePath(normalized)) return { matched: false }; + + return { fullReason: `unclassified path changed: ${normalized}` }; +} + +function resolveDomains(changedFiles) { + const moduleName = modulePath(); + const rootDryPackage = rootPackage(moduleName); + if (changedFiles === null) { + return { + mode: "full", + reason: "non-pull_request run or unavailable diff", + domains: ["all"], + dryRootPackage: rootDryPackage, + dryPackages: allDryPackages(moduleName), + livePackages: allLivePackages(moduleName), + }; + } + + const domains = new Set(); + let matchedRelevant = false; + let fullReason = ""; + + for (const file of changedFiles) { + const result = classifyPath(file, domains); + if (result.matched) matchedRelevant = true; + if (result.fullReason && !fullReason) fullReason = result.fullReason; + } + + if (fullReason) { + return { + mode: "full", + reason: fullReason, + domains: ["all"], + dryRootPackage: rootDryPackage, + dryPackages: allDryPackages(moduleName), + livePackages: allLivePackages(moduleName), + }; + } + + if (matchedRelevant && domains.size > 0) { + const sortedDomains = [...domains].sort(); + const packages = sortedDomains.map((domain) => `${moduleName}/tests/cli_e2e/${domain}`); + return { + mode: "subset", + reason: "business domain changes", + domains: sortedDomains, + dryRootPackage: rootDryPackage, + dryPackages: packages, + livePackages: packages, + }; + } + + return { + mode: "skip", + reason: "docs-only or no live CLI E2E impact", + domains: [], + dryRootPackage: "", + dryPackages: [], + livePackages: [], + }; +} + +function emit(resolved) { + const values = { + mode: resolved.mode, + reason: resolved.reason, + domains: resolved.domains.join(","), + dry_root_package: resolved.dryRootPackage, + dry_packages: resolved.dryPackages.join(" "), + live_packages: resolved.livePackages.join(" "), + }; + + const lines = Object.entries(values).map(([key, value]) => `${key}=${value}`); + console.log(lines.join("\n")); + + if (process.env.GITHUB_OUTPUT) { + fs.appendFileSync(process.env.GITHUB_OUTPUT, `${lines.join("\n")}\n`); + } +} + +if (require.main === module) { + emit(resolveDomains(readChangedFiles())); +} + +module.exports = { + classifyPath, + readChangedFiles, + resolveDomains, +}; diff --git a/scripts/e2e_domains.test.js b/scripts/e2e_domains.test.js new file mode 100644 index 000000000..5657d7f5d --- /dev/null +++ b/scripts/e2e_domains.test.js @@ -0,0 +1,94 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +const assert = require("node:assert/strict"); +const fs = require("node:fs"); +const os = require("node:os"); +const path = require("node:path"); +const { execFileSync } = require("node:child_process"); +const test = require("node:test"); + +const scriptPath = path.join(__dirname, "e2e_domains.js"); + +function parseOutput(raw) { + const result = {}; + for (const line of raw.trim().split(/\r?\n/)) { + const idx = line.indexOf("="); + if (idx === -1) continue; + result[line.slice(0, idx)] = line.slice(idx + 1); + } + return result; +} + +function runDomains(files) { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), "e2e-domains-")); + const file = path.join(dir, "changed.txt"); + fs.writeFileSync(file, `${files.join("\n")}\n`); + try { + return parseOutput(execFileSync(process.execPath, [scriptPath], { + cwd: path.join(__dirname, ".."), + encoding: "utf8", + env: { ...process.env, E2E_DOMAIN_CHANGED_FILES: file }, + })); + } finally { + fs.rmSync(dir, { recursive: true, force: true }); + } +} + +test("maps shortcut changes to one business domain package", () => { + const output = runDomains(["shortcuts/im/messages/send.go"]); + assert.equal(output.mode, "subset"); + assert.equal(output.domains, "im"); + assert.match(output.dry_root_package, /github\.com\/larksuite\/cli\/tests\/cli_e2e$/); + assert.match(output.live_packages, /github\.com\/larksuite\/cli\/tests\/cli_e2e\/im/); + assert.doesNotMatch(output.live_packages, /github\.com\/larksuite\/cli\/tests\/cli_e2e\/drive/); +}); + +test("maps doc shortcuts to docs package", () => { + const output = runDomains(["shortcuts/doc/update.go"]); + assert.equal(output.mode, "subset"); + assert.equal(output.domains, "docs"); + assert.match(output.live_packages, /github\.com\/larksuite\/cli\/tests\/cli_e2e\/docs/); +}); + +test("maps direct e2e domain package changes", () => { + const output = runDomains(["tests/cli_e2e/drive/helpers.go"]); + assert.equal(output.mode, "subset"); + assert.equal(output.domains, "drive"); + assert.match(output.live_packages, /github\.com\/larksuite\/cli\/tests\/cli_e2e\/drive/); +}); + +test("falls back to full for shared e2e harness changes", () => { + const output = runDomains(["tests/cli_e2e/core.go"]); + assert.equal(output.mode, "full"); + assert.equal(output.domains, "all"); + assert.match(output.reason, /shared CLI E2E harness changed/); +}); + +test("falls back to full for runtime changes", () => { + const output = runDomains(["cmd/root.go"]); + assert.equal(output.mode, "full"); + assert.equal(output.domains, "all"); + assert.match(output.reason, /shared\/runtime path changed/); +}); + +test("skips docs-only changes", () => { + const output = runDomains(["docs/usage.md", "README.md"]); + assert.equal(output.mode, "skip"); + assert.equal(output.domains, ""); + assert.equal(output.dry_root_package, ""); + assert.equal(output.live_packages, ""); +}); + +test("uses shared map for skill domain changes", () => { + const output = runDomains(["skills/lark-sheets/SKILL.md"]); + assert.equal(output.mode, "subset"); + assert.equal(output.domains, "sheets"); + assert.match(output.live_packages, /github\.com\/larksuite\/cli\/tests\/cli_e2e\/sheets/); +}); + +test("falls back to full when a mapped path has no e2e package", () => { + const output = runDomains(["shortcuts/whiteboard/export.go"]); + assert.equal(output.mode, "full"); + assert.match(output.reason, /unmapped CLI E2E domain path/); +}); diff --git a/scripts/pr-labels/index.js b/scripts/pr-labels/index.js index 01b6428ae..0abc8f905 100755 --- a/scripts/pr-labels/index.js +++ b/scripts/pr-labels/index.js @@ -4,6 +4,7 @@ const fs = require("node:fs/promises"); const path = require("node:path"); +const { labelDomainsForPath } = require("../domain-map"); // ============================================================================ // Constants & Configuration @@ -35,33 +36,6 @@ const CORE_PREFIXES = ["internal/auth/", "internal/engine/", "internal/config/", const HEAD_BUSINESS_DOMAINS = new Set(["im", "contact", "ccm", "base", "docx"]); const LOW_RISK_TYPES = new Set(["docs", "ci", "test", "chore"]); -// CODEOWNERS-based path to domain label mapping -// Maps shortcuts and skills paths to business domain labels -const PATH_TO_DOMAIN_MAP = { - // shortcuts - "shortcuts/im/": "im", - "shortcuts/vc/": "vc", - "shortcuts/calendar/": "calendar", - "shortcuts/doc/": "ccm", - "shortcuts/sheets/": "ccm", - "shortcuts/drive/": "ccm", - "shortcuts/wiki/": "ccm", - "shortcuts/base/": "base", - "shortcuts/mail/": "mail", - "shortcuts/task/": "task", - "shortcuts/contact/": "contact", - // skills - "skills/lark-im/": "im", - "skills/lark-vc/": "vc", - "skills/lark-doc/": "ccm", - "skills/lark-wiki/": "ccm", - "skills/lark-base/": "base", - "skills/lark-mail/": "mail", - "skills/lark-calendar/": "calendar", - "skills/lark-task/": "task", - "skills/lark-contact/": "contact", -}; - const SENSITIVE_PATTERN = /(^|\/)(auth|permission|permissions|security)(\/|_|\.|$)/; const CLASS_STANDARDS = { @@ -285,13 +259,7 @@ function skillDomainForPath(filePath) { // Get business domain label based on CODEOWNERS path mapping function getBusinessDomain(filePath) { - const normalized = normalizePath(filePath); - for (const [prefix, domain] of Object.entries(PATH_TO_DOMAIN_MAP)) { - if (normalized.startsWith(prefix)) { - return domain; - } - } - return ""; + return labelDomainsForPath(filePath)[0] || ""; } async function detectNewShortcutDomain(files) { diff --git a/scripts/resolve-changed-from.test.sh b/scripts/resolve-changed-from.test.sh index dfe8d71ad..9aba01afa 100644 --- a/scripts/resolve-changed-from.test.sh +++ b/scripts/resolve-changed-from.test.sh @@ -8,7 +8,17 @@ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" script="$repo_root/scripts/resolve-changed-from.sh" tmp="${TMPDIR:-/tmp}/resolve-changed-from-test-$$" -trap 'rm -rf "$tmp"' EXIT + +cleanup_tmp() { + local attempt + for attempt in 1 2 3; do + rm -rf "$tmp" && return 0 + sleep 1 + done + rm -rf "$tmp" +} + +trap cleanup_tmp EXIT mkdir -p "$tmp" git_init() { diff --git a/shortcuts/apps/apps_db_audit_list.go b/shortcuts/apps/apps_db_audit_list.go index ca03092e5..1b3545bf7 100644 --- a/shortcuts/apps/apps_db_audit_list.go +++ b/shortcuts/apps/apps_db_audit_list.go @@ -40,7 +40,7 @@ var AppsDBAuditList = common.Shortcut{ {Name: "until", Desc: "filter: event at or before; same formats as --since"}, {Name: "page-size", Type: "int", Default: "20", Desc: "page size"}, {Name: "page-token", Desc: "pagination cursor from previous response"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -145,7 +145,10 @@ func fetchExistingTables(rctx *common.RuntimeContext, appID, env string) (map[st existing := map[string]bool{} token := "" for { - params := map[string]interface{}{"env": env, "page_size": 100} + params := map[string]interface{}{"page_size": 100} + if env != "" { + params["env"] = env + } if token != "" { params["page_token"] = token } @@ -168,7 +171,11 @@ func fetchExistingTables(rctx *common.RuntimeContext, appID, env string) (map[st // fetchAuditEnabledTables 拉审计状态,返回当前已开启审计的表名集合(status 命令同源接口)。 func fetchAuditEnabledTables(rctx *common.RuntimeContext, appID, env string) (map[string]bool, error) { - data, err := rctx.CallAPITyped("GET", appAuditStatusPath(appID), map[string]interface{}{"env": env}, nil) + statusParams := map[string]interface{}{} + if env != "" { + statusParams["env"] = env + } + data, err := rctx.CallAPITyped("GET", appAuditStatusPath(appID), statusParams, nil) if err != nil { return nil, err } @@ -208,11 +215,10 @@ func auditListTables(rctx *common.RuntimeContext) []string { // buildAuditListParams 组装 audit_list 查询参数:env / tables(逗号拼接) / page_size 及可选 since/until/page_token。 func buildAuditListParams(rctx *common.RuntimeContext, tables []string) map[string]interface{} { - params := map[string]interface{}{ - "env": dbEnv(rctx), + params := dbEnvParams(rctx, map[string]interface{}{ "tables": strings.Join(tables, ","), "page_size": rctx.Int("page-size"), - } + }) addStr := func(flag, key string) { if v := strings.TrimSpace(rctx.Str(flag)); v != "" { params[key] = v diff --git a/shortcuts/apps/apps_db_audit_set.go b/shortcuts/apps/apps_db_audit_set.go index 93f0d4f7e..5833d3a86 100644 --- a/shortcuts/apps/apps_db_audit_set.go +++ b/shortcuts/apps/apps_db_audit_set.go @@ -35,7 +35,7 @@ var AppsDBAuditEnable = common.Shortcut{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, {Name: "table", Desc: "table to enable audit for", Required: true}, {Name: "retention", Default: "7d", Enum: auditRetentions, Desc: "how long to keep audit logs"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -47,7 +47,7 @@ var AppsDBAuditEnable = common.Shortcut{ return common.NewDryRunAPI(). POST(appAuditSetPath(appID)). Desc("Enable table audit"). - Params(map[string]interface{}{"env": dbEnv(rctx)}). + Params(dbEnvParams(rctx, map[string]interface{}{})). Body(map[string]interface{}{"table": strings.TrimSpace(rctx.Str("table")), "enabled": true, "retention": rctx.Str("retention")}) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { @@ -60,7 +60,7 @@ var AppsDBAuditEnable = common.Shortcut{ stop := rctx.StartSpinner("Enabling audit logging for " + table) defer stop() data, err := rctx.CallAPITyped("POST", appAuditSetPath(appID), - map[string]interface{}{"env": dbEnv(rctx)}, + dbEnvParams(rctx, map[string]interface{}{}), map[string]interface{}{"table": table, "enabled": true, "retention": retention}) stop() if err != nil { @@ -96,7 +96,7 @@ var AppsDBAuditDisable = common.Shortcut{ Flags: append([]common.Flag{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, {Name: "table", Desc: "table to disable audit for", Required: true}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -108,7 +108,7 @@ var AppsDBAuditDisable = common.Shortcut{ return common.NewDryRunAPI(). POST(appAuditSetPath(appID)). Desc("Disable table audit"). - Params(map[string]interface{}{"env": dbEnv(rctx)}). + Params(dbEnvParams(rctx, map[string]interface{}{})). Body(map[string]interface{}{"table": strings.TrimSpace(rctx.Str("table")), "enabled": false}) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { @@ -118,7 +118,7 @@ var AppsDBAuditDisable = common.Shortcut{ } table := strings.TrimSpace(rctx.Str("table")) data, err := rctx.CallAPITyped("POST", appAuditSetPath(appID), - map[string]interface{}{"env": dbEnv(rctx)}, + dbEnvParams(rctx, map[string]interface{}{}), map[string]interface{}{"table": table, "enabled": false}) if err != nil { return withAppsHint(err, dbAuditSetHint) diff --git a/shortcuts/apps/apps_db_audit_status.go b/shortcuts/apps/apps_db_audit_status.go index 341e11bdb..6221eea36 100644 --- a/shortcuts/apps/apps_db_audit_status.go +++ b/shortcuts/apps/apps_db_audit_status.go @@ -30,7 +30,7 @@ var AppsDBAuditStatus = common.Shortcut{ Flags: append([]common.Flag{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, {Name: "table", Desc: "show status for a single table (default: all configured tables)"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -75,7 +75,7 @@ var AppsDBAuditStatus = common.Shortcut{ // buildAuditStatusParams 组装 audit_status 查询参数:env 及可选 table(单表查询)。 func buildAuditStatusParams(rctx *common.RuntimeContext) map[string]interface{} { - params := map[string]interface{}{"env": dbEnv(rctx)} + params := dbEnvParams(rctx, map[string]interface{}{}) if t := strings.TrimSpace(rctx.Str("table")); t != "" { params["table"] = t } diff --git a/shortcuts/apps/apps_db_changelog_list.go b/shortcuts/apps/apps_db_changelog_list.go index 052bbf9fe..d007b4b02 100644 --- a/shortcuts/apps/apps_db_changelog_list.go +++ b/shortcuts/apps/apps_db_changelog_list.go @@ -39,7 +39,7 @@ var AppsDBChangelogList = common.Shortcut{ {Name: "until", Desc: "filter: changed at or before; same formats as --since"}, {Name: "page-size", Type: "int", Default: "20", Desc: "page size"}, {Name: "page-token", Desc: "pagination cursor from previous response"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -77,10 +77,9 @@ var AppsDBChangelogList = common.Shortcut{ // buildChangelogParams 组装 changelog_list 查询参数:env / page_size 及可选 table/change_id/since/until/page_token。 func buildChangelogParams(rctx *common.RuntimeContext) map[string]interface{} { - params := map[string]interface{}{ - "env": dbEnv(rctx), + params := dbEnvParams(rctx, map[string]interface{}{ "page_size": rctx.Int("page-size"), - } + }) addStr := func(flag, key string) { if v := strings.TrimSpace(rctx.Str(flag)); v != "" { params[key] = v diff --git a/shortcuts/apps/apps_db_data_export.go b/shortcuts/apps/apps_db_data_export.go index 775406409..9ac45e689 100644 --- a/shortcuts/apps/apps_db_data_export.go +++ b/shortcuts/apps/apps_db_data_export.go @@ -47,7 +47,7 @@ var AppsDBDataExport = common.Shortcut{ {Name: "table", Desc: "source table", Required: true}, {Name: "output", Desc: "local output path; extension picks format .csv/.json/.sql (default: .csv)"}, {Name: "limit", Type: "int", Default: "5000", Desc: "max rows to export (1..5000)"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "source db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "source db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -75,10 +75,10 @@ var AppsDBDataExport = common.Shortcut{ return common.NewDryRunAPI(). GET(appDataExportPath(appID)). Desc("Export Miaoda app table data (raw bytes)"). - Params(map[string]interface{}{ - "env": dbEnv(rctx), "table": strings.TrimSpace(rctx.Str("table")), + Params(dbEnvParams(rctx, map[string]interface{}{ + "table": strings.TrimSpace(rctx.Str("table")), "format": format, "limit": rctx.Int("limit"), - }) + })) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { appID, err := requireAppID(rctx.Str("app-id")) @@ -95,15 +95,18 @@ var AppsDBDataExport = common.Shortcut{ // total 查询失败不阻断导出——回退到按导出文件内容数行。 total, totalErr := queryExportTotal(rctx, appID, dbEnv(rctx), table) + exportQuery := larkcore.QueryParams{ + "table": []string{table}, + "format": []string{format}, + "limit": []string{strconv.Itoa(rctx.Int("limit"))}, + } + if env := dbEnv(rctx); env != "" { + exportQuery["env"] = []string{env} + } resp, err := rctx.DoAPI(&larkcore.ApiReq{ - HttpMethod: http.MethodGet, - ApiPath: appDataExportPath(appID), - QueryParams: larkcore.QueryParams{ - "env": []string{dbEnv(rctx)}, - "table": []string{table}, - "format": []string{format}, - "limit": []string{strconv.Itoa(rctx.Int("limit"))}, - }, + HttpMethod: http.MethodGet, + ApiPath: appDataExportPath(appID), + QueryParams: exportQuery, }) if err != nil { return withAppsHint(errs.NewNetworkError(errs.SubtypeNetworkTransport, "export request failed").WithCause(err).WithRetryable(), dbDataExportHint) @@ -157,8 +160,11 @@ var AppsDBDataExport = common.Shortcut{ // queryExportTotal 调 GetAppTableRecordList(page_size=1)取 total(符合条件的记录总数)。 // 该接口与 +db-data-export 同为 spark:app:read scope,避免导出命令被迫升级到写权限。 func queryExportTotal(rctx *common.RuntimeContext, appID, env, table string) (int, error) { - raw, err := rctx.CallAPITyped("GET", appTableRecordsPath(appID, table), - map[string]interface{}{"env": env, "page_size": 1}, nil) + params := map[string]interface{}{"page_size": 1} + if env != "" { + params["env"] = env + } + raw, err := rctx.CallAPITyped("GET", appTableRecordsPath(appID, table), params, nil) if err != nil { return 0, err } diff --git a/shortcuts/apps/apps_db_data_import.go b/shortcuts/apps/apps_db_data_import.go index d3266eeb0..ac94906a0 100644 --- a/shortcuts/apps/apps_db_data_import.go +++ b/shortcuts/apps/apps_db_data_import.go @@ -44,7 +44,7 @@ var AppsDBDataImport = common.Shortcut{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, {Name: "file", Desc: "local data file (.csv/.json), relative to cwd", Required: true}, {Name: "table", Desc: "target table (default: file name without extension)"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -76,7 +76,7 @@ var AppsDBDataImport = common.Shortcut{ return common.NewDryRunAPI(). POST(appDataImportPath(appID)). Desc("Import data file into Miaoda app table (multipart upload)"). - Params(map[string]interface{}{"env": dbEnv(rctx), "table": importTableName(rctx)}). + Params(dbEnvParams(rctx, map[string]interface{}{"table": importTableName(rctx)})). Body(map[string]interface{}{"file_name": fileName, "file": ""}) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { @@ -100,10 +100,14 @@ var AppsDBDataImport = common.Shortcut{ fd.AddField("file_name", fileName) fd.AddFile("file", bytes.NewReader(content)) + importQuery := larkcore.QueryParams{"table": []string{table}} + if env := dbEnv(rctx); env != "" { + importQuery["env"] = []string{env} + } resp, err := rctx.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodPost, ApiPath: appDataImportPath(appID), - QueryParams: larkcore.QueryParams{"env": []string{dbEnv(rctx)}, "table": []string{table}}, + QueryParams: importQuery, Body: fd, }, larkcore.WithFileUpload()) if err != nil { diff --git a/shortcuts/apps/apps_db_data_import_test.go b/shortcuts/apps/apps_db_data_import_test.go index 0902e2cf1..2eb0388f6 100644 --- a/shortcuts/apps/apps_db_data_import_test.go +++ b/shortcuts/apps/apps_db_data_import_test.go @@ -121,6 +121,31 @@ func TestAppsDBDataImport_DryRunMultipartShape(t *testing.T) { } } +// TestAppsDBDataImport_DryRunOmitsEnvWhenUnset 验证不传 --environment 时 dry-run 的 query +// 不带 env 键(交服务端按应用形态自动选分支),但仍携带 table。 +func TestAppsDBDataImport_DryRunOmitsEnvWhenUnset(t *testing.T) { + chdirTemp(t) + _ = os.WriteFile("orders.csv", []byte("id\n1\n"), 0o600) + factory, stdout, _ := newAppsExecuteFactory(t) + if err := runAppsShortcut(t, AppsDBDataImport, + []string{"+db-data-import", "--app-id", "app_x", "--file", "orders.csv", "--dry-run", "--yes", "--as", "user"}, factory, stdout); err != nil { + t.Fatalf("dry-run err=%v", err) + } + var env struct { + API []struct { + Params map[string]interface{} `json:"params"` + } `json:"api"` + } + _ = json.Unmarshal([]byte(stdout.String()), &env) + p := env.API[0].Params + if _, ok := p["env"]; ok { + t.Fatalf("no --environment → env key must be omitted, got params=%v", p) + } + if p["table"] != "orders" { + t.Fatalf("table should still default to file basename, got params=%v", p) + } +} + // TestAppsDBDataImport_Success 验证成功导入后输出含 table、rows 与回显的 file 名。 func TestAppsDBDataImport_Success(t *testing.T) { chdirTemp(t) diff --git a/shortcuts/apps/apps_db_env_migrate.go b/shortcuts/apps/apps_db_env_migrate.go index bea63a6a6..363463c28 100644 --- a/shortcuts/apps/apps_db_env_migrate.go +++ b/shortcuts/apps/apps_db_env_migrate.go @@ -97,6 +97,16 @@ var AppsDBEnvMigrate = common.Shortcut{ if err != nil { return err } + // 先 dry_run 预览拿待发布变更数(对齐 miaoda-cli 的 diff-then-apply):服务端在未经 + // dry_run 预热时直接 apply,虽发布成功却把 changes_applied 回填成 0(展示「Migrated (0 changes)」)。 + // 这一步既预热服务端计数、又作为 apply 仍回 0 时的兜底数。dry_run 报错(如无待发布变更)不阻断, + // 交由下面真实 apply 统一报同样的业务错。 + pending := 0 + var previewFrom, previewTo string + if preview, perr := rctx.CallAPITyped("POST", appEnvMigratePath(appID), nil, map[string]interface{}{"dry_run": true}); perr == nil { + pending = len(projectMigrationChanges(preview["changes"])) + previewFrom, previewTo = common.GetString(preview, "from"), common.GetString(preview, "to") + } stop := rctx.StartSpinner("Applying migration (dev → online)") defer stop() submit, err := rctx.CallAPITyped("POST", appEnvMigratePath(appID), nil, map[string]interface{}{"dry_run": false}) @@ -104,6 +114,12 @@ var AppsDBEnvMigrate = common.Shortcut{ return withAppsHint(err, dbEnvMigrateHint) } from, to := common.GetString(submit, "from"), common.GetString(submit, "to") + if from == "" { + from = previewFrom + } + if to == "" { + to = previewTo + } taskID := common.GetString(submit, "task_id") applied := intFromAny(submit["changes_applied"]) if applied == 0 { @@ -131,6 +147,10 @@ var AppsDBEnvMigrate = common.Shortcut{ applied = n } } + // 服务端把发布成功的变更数回 0 时,用发布前 dry_run 预览的 pending 数兜底,避免误显示「(0 changes)」。 + if applied == 0 && pending > 0 { + applied = pending + } stop() // clear spinner before printing the result out := map[string]interface{}{"status": "migrated", "from": from, "to": to, "changes_applied": applied} rctx.OutFormat(out, nil, func(w io.Writer) { diff --git a/shortcuts/apps/apps_db_env_recovery_quota_test.go b/shortcuts/apps/apps_db_env_recovery_quota_test.go index a2dee10b1..013f37bba 100644 --- a/shortcuts/apps/apps_db_env_recovery_quota_test.go +++ b/shortcuts/apps/apps_db_env_recovery_quota_test.go @@ -105,8 +105,10 @@ func TestAppsDBEnvMigrate_DryRunBody(t *testing.T) { // 异步:submit 返 task_id,status 立刻 applied → CLI 对外统一 migrated。 func TestAppsDBEnvMigrate_AsyncPollSuccess(t *testing.T) { factory, stdout, reg := newAppsExecuteFactory(t) + // Reusable:Execute 现在会先打一次 dry_run 预览拿待发布数、再打 apply(对齐 miaoda-cli 的 + // diff-then-apply,兜底服务端 apply 少报 changes_applied 的情况),故同一 POST 端点被调用两次。 reg.Register(&httpmock.Stub{ - Method: "POST", URL: dbEnvMigrateURL, + Method: "POST", URL: dbEnvMigrateURL, Reusable: true, Body: map[string]interface{}{"code": 0, "data": map[string]interface{}{"from": "dev", "to": "online", "task_id": "t1"}}, }) reg.Register(&httpmock.Stub{ @@ -126,8 +128,10 @@ func TestAppsDBEnvMigrate_AsyncPollSuccess(t *testing.T) { // TestAppsDBEnvMigrate_PollFailedSurfacesError 验证轮询到 failed 时返回 API/server_error 类型错误,携带服务端 message 与恢复 hint。 func TestAppsDBEnvMigrate_PollFailedSurfacesError(t *testing.T) { factory, stdout, reg := newAppsExecuteFactory(t) + // Reusable:Execute 现在会先打一次 dry_run 预览拿待发布数、再打 apply(对齐 miaoda-cli 的 + // diff-then-apply,兜底服务端 apply 少报 changes_applied 的情况),故同一 POST 端点被调用两次。 reg.Register(&httpmock.Stub{ - Method: "POST", URL: dbEnvMigrateURL, + Method: "POST", URL: dbEnvMigrateURL, Reusable: true, Body: map[string]interface{}{"code": 0, "data": map[string]interface{}{"from": "dev", "to": "online", "task_id": "t1"}}, }) reg.Register(&httpmock.Stub{ @@ -319,6 +323,31 @@ func TestAppsDBQuotaGet_WithQuotaPretty(t *testing.T) { } // 配额未对接(storage_quota_bytes=0)→ json 删 quota/usage_percent,仅留已用量与 tables/views。 +// TestAppsDBQuotaGet_DryRunOmitsEnvWhenUnset 验证不传 --environment 时 quota-get 的 dry-run +// query 不带 env 键(交服务端按应用形态自动选分支)。 +func TestAppsDBQuotaGet_DryRunOmitsEnvWhenUnset(t *testing.T) { + factory, stdout, _ := newAppsExecuteFactory(t) + if err := runAppsShortcut(t, AppsDBQuotaGet, + []string{"+db-quota-get", "--app-id", "app_x", "--dry-run", "--as", "user"}, factory, stdout); err != nil { + t.Fatalf("dry-run err=%v", err) + } + var env struct { + API []struct { + Method string `json:"method"` + URL string `json:"url"` + Params map[string]interface{} `json:"params"` + } `json:"api"` + } + _ = json.Unmarshal([]byte(stdout.String()), &env) + a := env.API[0] + if a.Method != "GET" || a.URL != dbQuotaURL { + t.Fatalf("dry-run = %s %s", a.Method, a.URL) + } + if _, ok := a.Params["env"]; ok { + t.Fatalf("no --environment → env key must be omitted, got params=%v", a.Params) + } +} + func TestAppsDBQuotaGet_NoQuotaOmitsFields(t *testing.T) { factory, stdout, reg := newAppsExecuteFactory(t) reg.Register(&httpmock.Stub{ diff --git a/shortcuts/apps/apps_db_execute.go b/shortcuts/apps/apps_db_execute.go index 290e470fe..ceae294ca 100644 --- a/shortcuts/apps/apps_db_execute.go +++ b/shortcuts/apps/apps_db_execute.go @@ -66,7 +66,7 @@ var AppsDBExecute = common.Shortcut{ {Name: "sql", Desc: "SQL text; use - to read stdin. Mutually exclusive with --file", Input: []string{common.Stdin}}, {Name: "file", Desc: "path to a .sql file (relative to cwd). Mutually exclusive with --sql"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -291,10 +291,9 @@ func parseErrorSentinel(data string) (int, string) { // // CLI 永远走 DBA 模式,原子性由用户在 SQL 内显式 BEGIN/COMMIT 控制;不暴露 transactional flag 给用户。 func buildDBSQLParams(rctx *common.RuntimeContext) map[string]interface{} { - return map[string]interface{}{ - "env": dbEnv(rctx), + return dbEnvParams(rctx, map[string]interface{}{ "transactional": false, - } + }) } // resolveExecuteSQL 返回要执行的 SQL,在用时(DryRun/Execute)现读,使 --file 的内容 diff --git a/shortcuts/apps/apps_db_quota_get.go b/shortcuts/apps/apps_db_quota_get.go index f5f1563be..ab7abca33 100644 --- a/shortcuts/apps/apps_db_quota_get.go +++ b/shortcuts/apps/apps_db_quota_get.go @@ -29,7 +29,7 @@ var AppsDBQuotaGet = common.Shortcut{ HasFormat: true, Flags: append([]common.Flag{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -41,14 +41,14 @@ var AppsDBQuotaGet = common.Shortcut{ return common.NewDryRunAPI(). GET(appDbQuotaPath(appID)). Desc("Get Miaoda app database storage usage"). - Params(map[string]interface{}{"env": dbEnv(rctx)}) + Params(dbEnvParams(rctx, map[string]interface{}{})) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { appID, err := requireAppID(rctx.Str("app-id")) if err != nil { return err } - data, err := rctx.CallAPITyped("GET", appDbQuotaPath(appID), map[string]interface{}{"env": dbEnv(rctx)}, nil) + data, err := rctx.CallAPITyped("GET", appDbQuotaPath(appID), dbEnvParams(rctx, map[string]interface{}{}), nil) if err != nil { return withAppsHint(err, appIDListHint) } diff --git a/shortcuts/apps/apps_db_recovery.go b/shortcuts/apps/apps_db_recovery.go index 181a01eec..83a4d5066 100644 --- a/shortcuts/apps/apps_db_recovery.go +++ b/shortcuts/apps/apps_db_recovery.go @@ -32,19 +32,23 @@ var AppsDBRecoveryDiff = common.Shortcut{ Scopes: []string{"spark:app:write"}, AuthTypes: []string{"user"}, HasFormat: true, - Flags: []common.Flag{ + Flags: append([]common.Flag{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, {Name: "target", Desc: "point in time to restore to; relative (2h/3d) | date | datetime | ISO 8601 w/ TZ", Required: true}, - }, + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err } + if err := rejectLegacyEnvFlag(rctx); err != nil { + return err + } return normalizeTimeFlags(rctx, "target") }, DryRun: func(ctx context.Context, rctx *common.RuntimeContext) *common.DryRunAPI { appID, _ := requireAppID(rctx.Str("app-id")) return common.NewDryRunAPI().POST(appRecoveryPath(appID)).Desc("Preview PITR recovery"). + Params(dbEnvParams(rctx, map[string]interface{}{})). Body(map[string]interface{}{"target": rctx.Str("target"), "dry_run": true}) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { @@ -81,19 +85,23 @@ var AppsDBRecoveryApply = common.Shortcut{ Scopes: []string{"spark:app:write"}, AuthTypes: []string{"user"}, HasFormat: true, - Flags: []common.Flag{ + Flags: append([]common.Flag{ {Name: "app-id", Desc: "Miaoda app id", Required: true}, {Name: "target", Desc: "point in time to restore to; relative (2h/3d) | date | datetime | ISO 8601 w/ TZ", Required: true}, - }, + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err } + if err := rejectLegacyEnvFlag(rctx); err != nil { + return err + } return normalizeTimeFlags(rctx, "target") }, DryRun: func(ctx context.Context, rctx *common.RuntimeContext) *common.DryRunAPI { appID, _ := requireAppID(rctx.Str("app-id")) return common.NewDryRunAPI().POST(appRecoveryPath(appID)).Desc("Apply PITR recovery"). + Params(dbEnvParams(rctx, map[string]interface{}{})). Body(map[string]interface{}{"target": rctx.Str("target"), "dry_run": false}) }, Execute: func(ctx context.Context, rctx *common.RuntimeContext) error { @@ -104,7 +112,7 @@ var AppsDBRecoveryApply = common.Shortcut{ target := rctx.Str("target") stop := rctx.StartSpinner("Restoring database (target: " + target + ")") defer stop() - submit, err := rctx.CallAPITyped("POST", appRecoveryPath(appID), nil, map[string]interface{}{"target": target, "dry_run": false}) + submit, err := rctx.CallAPITyped("POST", appRecoveryPath(appID), dbEnvParams(rctx, map[string]interface{}{}), map[string]interface{}{"target": target, "dry_run": false}) if err != nil { return withAppsHint(err, dbRecoveryHint) } @@ -119,7 +127,7 @@ var AppsDBRecoveryApply = common.Shortcut{ } final, perr := pollUntil(rctx.Ctx(), 2*time.Second, 2*time.Minute, func() (map[string]interface{}, error) { - return rctx.CallAPITyped("GET", appRecoveryApplyStatusPath(appID), nil, nil) + return rctx.CallAPITyped("GET", appRecoveryApplyStatusPath(appID), dbEnvParams(rctx, map[string]interface{}{}), nil) }, func(d map[string]interface{}) (bool, error) { switch strings.ToLower(common.GetString(d, "status")) { @@ -157,7 +165,7 @@ var AppsDBRecoveryApply = common.Shortcut{ func runRecoveryPreview(rctx *common.RuntimeContext, appID, target string) (map[string]interface{}, error) { stop := rctx.StartSpinner("Previewing recovery impact (target: " + target + ")") defer stop() - submit, err := rctx.CallAPITyped("POST", appRecoveryPath(appID), nil, map[string]interface{}{"target": target, "dry_run": true}) + submit, err := rctx.CallAPITyped("POST", appRecoveryPath(appID), dbEnvParams(rctx, map[string]interface{}{}), map[string]interface{}{"target": target, "dry_run": true}) if err != nil { return nil, withAppsHint(err, dbRecoveryHint) } @@ -167,7 +175,7 @@ func runRecoveryPreview(rctx *common.RuntimeContext, appID, target string) (map[ } return pollUntil(rctx.Ctx(), 1*time.Second, 2*time.Minute, func() (map[string]interface{}, error) { - return rctx.CallAPITyped("GET", appRecoveryDiffStatusPath(appID), map[string]interface{}{"preview_request_id": prid}, nil) + return rctx.CallAPITyped("GET", appRecoveryDiffStatusPath(appID), dbEnvParams(rctx, map[string]interface{}{"preview_request_id": prid}), nil) }, func(d map[string]interface{}) (bool, error) { switch strings.ToLower(common.GetString(d, "preview_status")) { @@ -195,13 +203,13 @@ type recoveryChange struct { // recoveryDiffOutput 组装 diff 输出:target / tables_affected / changes[] / estimated_seconds。 func recoveryDiffOutput(target string, preview map[string]interface{}) map[string]interface{} { arr, _ := preview["changes"].([]interface{}) - changes := make([]recoveryChange, 0, len(arr)) + raw := make([]recoveryChange, 0, len(arr)) for _, it := range arr { m, ok := it.(map[string]interface{}) if !ok { continue } - changes = append(changes, recoveryChange{ + raw = append(raw, recoveryChange{ Table: common.GetString(m, "table"), Inserted: m["inserted"], Deleted: m["deleted"], @@ -209,16 +217,33 @@ func recoveryDiffOutput(target string, preview map[string]interface{}) map[strin DroppedAt: common.GetString(m, "dropped_at"), }) } - tablesAffected := intFromAny(preview["tables_affected"]) - if tablesAffected == 0 { - tablesAffected = len(changes) + // 服务端可能对同一张表既下发 schema 动作(drop/restore/alter)、又下发纯数据行变更。 + // schema 动作已涵盖数据结果(如 drop 隐含删光行),丢弃该表的冗余数据行那条,避免同表 + // 两行 + tables_affected 翻倍。 + hasSchema := map[string]bool{} + for _, c := range raw { + if c.Action != "" { + hasSchema[c.Table] = true + } + } + changes := make([]recoveryChange, 0, len(raw)) + for _, c := range raw { + if c.Action == "" && hasSchema[c.Table] { + continue + } + changes = append(changes, c) + } + // tables_affected 按去重后的不同表数计(而非变更条数)。 + seen := map[string]bool{} + for _, c := range changes { + seen[c.Table] = true } est := intFromAny(preview["estimated_seconds"]) if est == 0 { est = 30 // PRD 兜底 } return map[string]interface{}{ - "target": target, "tables_affected": tablesAffected, + "target": target, "tables_affected": len(seen), "changes": changes, "estimated_seconds": est, } } diff --git a/shortcuts/apps/apps_db_table_get.go b/shortcuts/apps/apps_db_table_get.go index 5aff1852d..91f6a8841 100644 --- a/shortcuts/apps/apps_db_table_get.go +++ b/shortcuts/apps/apps_db_table_get.go @@ -37,7 +37,7 @@ var AppsDBTableGet = common.Shortcut{ Flags: append([]common.Flag{ {Name: "app-id", Desc: "app id", Required: true}, {Name: "table", Desc: "table name", Required: true}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -80,7 +80,7 @@ var AppsDBTableGet = common.Shortcut{ // CLI 检测 rctx.Format == "pretty" 时给 server 带 format=ddl,要求返 CREATE 语句文本; // 其他 format(含默认 json)不传该参数,让 server 返默认结构化字段。 func buildDBTableGetParams(rctx *common.RuntimeContext) map[string]interface{} { - params := map[string]interface{}{"env": dbEnv(rctx)} + params := dbEnvParams(rctx, map[string]interface{}{}) if rctx.Format == "pretty" { params["format"] = "ddl" } diff --git a/shortcuts/apps/apps_db_table_list.go b/shortcuts/apps/apps_db_table_list.go index b24c04d83..a117c1879 100644 --- a/shortcuts/apps/apps_db_table_list.go +++ b/shortcuts/apps/apps_db_table_list.go @@ -8,6 +8,7 @@ import ( "encoding/json" "fmt" "io" + "strconv" "strings" "github.com/larksuite/cli/shortcuts/common" @@ -42,7 +43,7 @@ var AppsDBTableList = common.Shortcut{ {Name: "app-id", Desc: "app id", Required: true}, {Name: "page-size", Type: "int", Default: "20", Desc: "page size"}, {Name: "page-token", Desc: "pagination cursor from previous response"}, - }, dbEnvFlags("dev", []string{"dev", "online"}, "target db environment (default dev; use online for the online environment, or for an app whose DB is not multi-env)")...), + }, dbEnvFlags("", []string{"dev", "online"}, "target db environment; leave unset to auto-select (multi-env app uses dev, single-env uses online), or pass dev/online")...), Validate: func(ctx context.Context, rctx *common.RuntimeContext) error { if _, err := requireAppID(rctx.Str("app-id")); err != nil { return err @@ -110,10 +111,9 @@ func projectTableListItems(raw interface{}) []dbTableListItem { } func buildDBTableListParams(rctx *common.RuntimeContext) map[string]interface{} { - params := map[string]interface{}{ - "env": dbEnv(rctx), + params := dbEnvParams(rctx, map[string]interface{}{ "page_size": rctx.Int("page-size"), - } + }) if token := strings.TrimSpace(rctx.Str("page-token")); token != "" { params["page_token"] = token } @@ -286,6 +286,17 @@ func numericAsFloat(raw interface{}) (float64, bool) { return 0, false } return f, true + case string: + // 服务端有些数值字段(如 recovery diff 的 inserted/deleted 行数)以字符串下发。 + s := strings.TrimSpace(v) + if s == "" { + return 0, false + } + f, err := strconv.ParseFloat(s, 64) + if err != nil { + return 0, false + } + return f, true case nil: return 0, false } diff --git a/shortcuts/apps/apps_db_table_list_test.go b/shortcuts/apps/apps_db_table_list_test.go index 85e1dd4c1..9cdc12b43 100644 --- a/shortcuts/apps/apps_db_table_list_test.go +++ b/shortcuts/apps/apps_db_table_list_test.go @@ -236,7 +236,11 @@ func TestNumericAsFloat_AllTypes(t *testing.T) { {"json.Number valid", json.Number("13.5"), 13.5, true}, {"json.Number invalid", json.Number("abc"), 0, false}, {"nil", nil, 0, false}, - {"unsupported string", "x", 0, false}, + {"non-numeric string", "x", 0, false}, + {"numeric string", "13.5", 13.5, true}, + {"numeric string int", "2", 2, true}, + {"numeric string padded", " 13.5 ", 13.5, true}, + {"empty string", "", 0, false}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { diff --git a/shortcuts/apps/db_common.go b/shortcuts/apps/db_common.go index 982c9bee2..3dc6b30ee 100644 --- a/shortcuts/apps/db_common.go +++ b/shortcuts/apps/db_common.go @@ -34,6 +34,16 @@ func dbEnv(rctx *common.RuntimeContext) string { return rctx.Str("environment") } +// dbEnvParams 把 env 并入 params:仅当显式指定了环境(非空)才带 env 键;未指定(空)时 +// 省略该键,由服务端按应用多环境状态自动选分支(多环境→dev,单环境→online)。与家族对 +// 空可选参数的 omit-empty 约定一致——不发空串,wire 上真正不带 env。原样返回同一个 map 便于链式。 +func dbEnvParams(rctx *common.RuntimeContext, params map[string]interface{}) map[string]interface{} { + if env := dbEnv(rctx); env != "" { + params["env"] = env + } + return params +} + // rejectLegacyEnvFlag 在 Validate 阶段拦截已移除的 --env:显式传了就报清晰的 validation 错,指向 --environment。 func rejectLegacyEnvFlag(rctx *common.RuntimeContext) error { if rctx.Changed("env") { diff --git a/shortcuts/calendar/calendar_create.go b/shortcuts/calendar/calendar_create.go index 8cedbe781..effb5f677 100644 --- a/shortcuts/calendar/calendar_create.go +++ b/shortcuts/calendar/calendar_create.go @@ -67,6 +67,26 @@ func parseAttendees(attendeesStr string, currentUserId string) ([]map[string]str return attendees, nil } +func attendeesIncludeRoom(attendees []map[string]string) bool { + for _, attendee := range attendees { + if attendee["type"] == "resource" || attendee["room_id"] != "" { + return true + } + } + return false +} + +func guideApprovalRoomReasonError(err error, attendees []map[string]string) error { + if err == nil || !attendeesIncludeRoom(attendees) { + return err + } + p, ok := errs.ProblemOf(err) + if !ok || !strings.Contains(strings.ToLower(p.Hint), "approval_reason") { + return err + } + return withStepContext(err, "approval meeting rooms require attendees[].approval_reason; calendar +create does not expose this low-frequency field. Create the event with the raw API flow, then use `lark-cli calendar event.attendees create --as user` with attendees[].approval_reason for the room attendee.") +} + var CalendarCreate = common.Shortcut{ Service: "calendar", Command: "+create", @@ -225,6 +245,7 @@ var CalendarCreate = common.Shortcut{ "need_notification": true, }) if err != nil { + err = guideApprovalRoomReasonError(err, attendees) // Rollback: delete the event _, rollbackErr := runtime.CallAPITyped("DELETE", fmt.Sprintf("/open-apis/calendar/v4/calendars/%s/events/%s", validate.EncodePathSegment(calendarId), validate.EncodePathSegment(eventId)), @@ -285,6 +306,9 @@ var CalendarCreate = common.Shortcut{ "start": startStr, "end": endStr, } + if recurrence, _ := event["recurrence"].(string); recurrence != "" { + resultData["recurrence"] = recurrence + } runtime.OutFormat(resultData, nil, func(w io.Writer) { var rows []map[string]interface{} diff --git a/shortcuts/calendar/calendar_get.go b/shortcuts/calendar/calendar_get.go new file mode 100644 index 000000000..a49fb1fbb --- /dev/null +++ b/shortcuts/calendar/calendar_get.go @@ -0,0 +1,279 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT +// +// calendar +get — get a single calendar event detail by calendar_id and event_id + +package calendar + +import ( + "context" + "encoding/json" + "fmt" + "io" + "strconv" + "strings" + "time" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/output" + "github.com/larksuite/cli/internal/validate" + "github.com/larksuite/cli/shortcuts/common" +) + +// calendarEventTime mirrors start_time / end_time in the API response. +type calendarEventTime struct { + Date string `json:"date,omitempty"` + Timestamp string `json:"timestamp,omitempty"` + Timezone string `json:"timezone,omitempty"` +} + +// calendarEventVChat mirrors the vchat block in the API response. +type calendarEventVChat struct { + VCType string `json:"vc_type,omitempty"` + IconType string `json:"icon_type,omitempty"` + Description string `json:"description,omitempty"` + MeetingURL string `json:"meeting_url,omitempty"` +} + +// calendarEventLocation mirrors the location block in the API response. +type calendarEventLocation struct { + Name string `json:"name,omitempty"` + Address string `json:"address,omitempty"` + Latitude float64 `json:"latitude,omitempty"` + Longitude float64 `json:"longitude,omitempty"` +} + +// calendarEventReminder mirrors a reminder entry. +type calendarEventReminder struct { + Minutes int `json:"minutes"` +} + +// calendarEventOrganizer mirrors event_organizer. +type calendarEventOrganizer struct { + UserID string `json:"user_id,omitempty"` + DisplayName string `json:"display_name,omitempty"` +} + +// calendarEventAttachment mirrors a single attachment entry. +type calendarEventAttachment struct { + FileToken string `json:"file_token,omitempty"` + FileSize string `json:"file_size,omitempty"` + Name string `json:"name,omitempty"` +} + +// calendarEventCheckInTime mirrors check_in_start_time / check_in_end_time. +type calendarEventCheckInTime struct { + TimeType string `json:"time_type,omitempty"` + Duration int `json:"duration"` +} + +// calendarEventCheckIn mirrors event_check_in. +type calendarEventCheckIn struct { + EnableCheckIn bool `json:"enable_check_in"` + CheckInStartTime *calendarEventCheckInTime `json:"check_in_start_time,omitempty"` + CheckInEndTime *calendarEventCheckInTime `json:"check_in_end_time,omitempty"` + NeedNotifyAttendees bool `json:"need_notify_attendees"` +} + +// calendarEvent mirrors the event object inside the API response. +type calendarEvent struct { + EventID string `json:"event_id,omitempty"` + OrganizerCalendarID string `json:"organizer_calendar_id,omitempty"` + Summary string `json:"summary,omitempty"` + Description string `json:"description,omitempty"` + StartTime *calendarEventTime `json:"start_time,omitempty"` + EndTime *calendarEventTime `json:"end_time,omitempty"` + VChat *calendarEventVChat `json:"vchat,omitempty"` + Visibility string `json:"visibility,omitempty"` + AttendeeAbility string `json:"attendee_ability,omitempty"` + FreeBusyStatus string `json:"free_busy_status,omitempty"` + SelfRsvpStatus string `json:"self_rsvp_status,omitempty"` + Location *calendarEventLocation `json:"location,omitempty"` + Color int `json:"color,omitempty"` + Reminders []calendarEventReminder `json:"reminders,omitempty"` + Recurrence string `json:"recurrence,omitempty"` + Status string `json:"status,omitempty"` + IsException bool `json:"is_exception,omitempty"` + RecurringEventID string `json:"recurring_event_id,omitempty"` + CreateTime string `json:"create_time,omitempty"` + EventOrganizer *calendarEventOrganizer `json:"event_organizer,omitempty"` + AppLink string `json:"app_link,omitempty"` + Attachments []calendarEventAttachment `json:"attachments,omitempty"` + EventCheckIn *calendarEventCheckIn `json:"event_check_in,omitempty"` +} + +// parseCalendarEvent decodes the API response data into a typed calendarEvent. +func parseCalendarEvent(data map[string]any) (*calendarEvent, error) { + rawEvent, ok := data["event"] + if !ok || rawEvent == nil { + return nil, errs.NewInternalError(errs.SubtypeInvalidResponse, "calendar event response missing 'event' field") + } + raw, err := json.Marshal(rawEvent) + if err != nil { + return nil, errs.NewInternalError(errs.SubtypeInvalidResponse, "calendar event response: marshal failed: %s", err).WithCause(err) + } + var event calendarEvent + if err := json.Unmarshal(raw, &event); err != nil { + return nil, errs.NewInternalError(errs.SubtypeInvalidResponse, "calendar event response: unmarshal failed: %s", err).WithCause(err) + } + return &event, nil +} + +// buildCalendarEventOutput converts the typed event into the output map and +// applies the four transformation rules: +// 1. create_time -> RFC3339 +// 2. start_time / end_time timestamp -> datetime (RFC3339), drop timestamp +// 3. flatten event into the top-level result +// 4. when status != "cancelled", drop status (and adjust all-day end date) +func buildCalendarEventOutput(event *calendarEvent) (map[string]interface{}, error) { + raw, err := json.Marshal(event) + if err != nil { + return nil, errs.NewInternalError(errs.SubtypeInvalidResponse, "calendar event marshal failed: %s", err).WithCause(err) + } + var out map[string]interface{} + if err := json.Unmarshal(raw, &out); err != nil { + return nil, errs.NewInternalError(errs.SubtypeInvalidResponse, "calendar event unmarshal failed: %s", err).WithCause(err) + } + + if ctStr, ok := out["create_time"].(string); ok && ctStr != "" { + if ts, err := strconv.ParseInt(ctStr, 10, 64); err == nil { + out["create_time"] = time.Unix(ts, 0).Local().Format(time.RFC3339) + } + } + + if startMap, ok := out["start_time"].(map[string]interface{}); ok { + if tsStr, ok := startMap["timestamp"].(string); ok && tsStr != "" { + if ts, err := strconv.ParseInt(tsStr, 10, 64); err == nil { + startMap["datetime"] = time.Unix(ts, 0).Local().Format(time.RFC3339) + delete(startMap, "timestamp") + } + } + } + if endMap, ok := out["end_time"].(map[string]interface{}); ok { + if tsStr, ok := endMap["timestamp"].(string); ok && tsStr != "" { + if ts, err := strconv.ParseInt(tsStr, 10, 64); err == nil { + endMap["datetime"] = time.Unix(ts, 0).Local().Format(time.RFC3339) + delete(endMap, "timestamp") + } + } + // All-day event: end date is exclusive in the API; rewind by 1s and reformat. + if dt, _ := endMap["datetime"].(string); dt == "" { + if dateStr, ok := endMap["date"].(string); ok && dateStr != "" { + if t, err := time.ParseInLocation("2006-01-02", dateStr, time.UTC); err == nil { + endMap["date"] = t.Add(-1 * time.Second).Format("2006-01-02") + } + } + } + } + + if status, _ := out["status"].(string); status != "cancelled" { + delete(out, "status") + } + + return out, nil +} + +// CalendarGet gets a single calendar event detail. +var CalendarGet = common.Shortcut{ + Service: "calendar", + Command: "+get", + Description: "Get a single calendar event detail by calendar-id and event-id", + Risk: "read", + Scopes: []string{"calendar:calendar.event:read"}, + AuthTypes: []string{"user", "bot"}, + HasFormat: true, + Flags: []common.Flag{ + {Name: "calendar-id", Desc: "calendar ID (default: primary)"}, + {Name: "event-id", Desc: "event ID", Required: true}, + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + if err := rejectCalendarAutoBotFallback(runtime); err != nil { + return err + } + for _, flag := range []string{"calendar-id", "event-id"} { + if val := strings.TrimSpace(runtime.Str(flag)); val != "" { + if err := common.RejectDangerousCharsTyped("--"+flag, val); err != nil { + return err + } + } + } + eventId := strings.TrimSpace(runtime.Str("event-id")) + if eventId == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "event-id cannot be empty").WithParam("--event-id") + } + return nil + }, + DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + calendarId := strings.TrimSpace(runtime.Str("calendar-id")) + d := common.NewDryRunAPI() + switch calendarId { + case "": + d.Desc("(calendar-id omitted) Will use primary calendar") + calendarId = "" + case "primary": + calendarId = "" + } + eventId := strings.TrimSpace(runtime.Str("event-id")) + return d. + GET("/open-apis/calendar/v4/calendars/:calendar_id/events/:event_id"). + Set("calendar_id", calendarId). + Set("event_id", eventId) + }, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + calendarId := strings.TrimSpace(runtime.Str("calendar-id")) + if calendarId == "" { + calendarId = PrimaryCalendarIDStr + } + eventId := strings.TrimSpace(runtime.Str("event-id")) + + data, err := runtime.CallAPITyped("GET", + fmt.Sprintf("/open-apis/calendar/v4/calendars/%s/events/%s", + validate.EncodePathSegment(calendarId), + validate.EncodePathSegment(eventId)), + nil, nil) + if err != nil { + return err + } + + event, err := parseCalendarEvent(data) + if err != nil { + return err + } + + out, err := buildCalendarEventOutput(event) + if err != nil { + return err + } + + runtime.OutFormat(out, nil, func(w io.Writer) { + summary, _ := out["summary"].(string) + if summary == "" { + summary = "(untitled)" + } + startMap, _ := out["start_time"].(map[string]interface{}) + endMap, _ := out["end_time"].(map[string]interface{}) + startStr, _ := startMap["datetime"].(string) + if startStr == "" { + startStr, _ = startMap["date"].(string) + } + endStr, _ := endMap["datetime"].(string) + if endStr == "" { + endStr, _ = endMap["date"].(string) + } + eventIdOut, _ := out["event_id"].(string) + freeBusyStatus, _ := out["free_busy_status"].(string) + selfRsvpStatus, _ := out["self_rsvp_status"].(string) + row := map[string]interface{}{ + "event_id": eventIdOut, + "summary": summary, + "start": startStr, + "end": endStr, + "free_busy_status": freeBusyStatus, + "self_rsvp_status": selfRsvpStatus, + } + output.PrintTable(w, []map[string]interface{}{row}) + fmt.Fprintln(w) + }) + return nil + }, +} diff --git a/shortcuts/calendar/calendar_test.go b/shortcuts/calendar/calendar_test.go index 970a141e3..5453ee682 100644 --- a/shortcuts/calendar/calendar_test.go +++ b/shortcuts/calendar/calendar_test.go @@ -673,6 +673,76 @@ func TestCreate_WithAttendees_InvalidParamsWithDetail_RollsBack(t *testing.T) { } } +func TestCreate_ApprovalRoomMissingReason_GuidesRawAttendeesAPI(t *testing.T) { + f, _, _, reg := cmdutil.TestFactory(t, defaultConfig()) + + reg.Register(&httpmock.Stub{ + Method: "POST", + URL: "/open-apis/calendar/v4/calendars/cal_test123/events", + Body: map[string]interface{}{ + "code": 0, "msg": "ok", + "data": map[string]interface{}{ + "event": map[string]interface{}{ + "event_id": "evt_approval_room", + "summary": "Approval Room", + "start_time": map[string]interface{}{"timestamp": "1742515200"}, + "end_time": map[string]interface{}{"timestamp": "1742518800"}, + }, + }, + }, + }) + reg.Register(&httpmock.Stub{ + Method: "POST", + URL: "/events/evt_approval_room/attendees", + Body: map[string]interface{}{ + "code": codeInvalidParamsWithDetail, + "msg": "invalid params", + "error": map[string]interface{}{ + "details": []interface{}{ + map[string]interface{}{"value": "attendees[0].approval_reason is required for approval meeting rooms"}, + }, + }, + }, + }) + reg.Register(&httpmock.Stub{ + Method: "DELETE", + URL: "/events/evt_approval_room", + Body: map[string]interface{}{"code": 0, "msg": "ok"}, + }) + + err := mountAndRun(t, CalendarCreate, []string{ + "+create", + "--summary", "Approval Room", + "--start", "2025-03-21T00:00:00+08:00", + "--end", "2025-03-21T01:00:00+08:00", + "--calendar-id", "cal_test123", + "--attendee-ids", "omm_room1", + "--as", "user", + }, f, nil) + + if err == nil { + t.Fatal("expected error for approval room missing approval_reason, got nil") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf returned !ok for %T", err) + } + if p.Category != errs.CategoryAPI { + t.Errorf("category=%q, want %q", p.Category, errs.CategoryAPI) + } + if p.Subtype != errs.SubtypeInvalidParameters { + t.Errorf("subtype=%q, want %q", p.Subtype, errs.SubtypeInvalidParameters) + } + if p.Code != codeInvalidParamsWithDetail { + t.Errorf("code=%d, want %d", p.Code, codeInvalidParamsWithDetail) + } + for _, want := range []string{"approval_reason", "calendar event.attendees create", "--as user", "rolled back successfully"} { + if !strings.Contains(p.Hint, want) { + t.Errorf("hint should contain %q, got: %q", want, p.Hint) + } + } +} + // When the add-attendees call fails AND the rollback DELETE also fails, the // primary error stays the add failure (classification preserved) and the Hint // must surface BOTH the rollback failure reason and the orphan event_id so the @@ -2234,17 +2304,17 @@ func TestResolveStartEnd_ExplicitValues(t *testing.T) { // Shortcuts() registration test // --------------------------------------------------------------------------- -func TestShortcuts_Returns9(t *testing.T) { +func TestShortcuts_Returns10(t *testing.T) { shortcuts := Shortcuts() - if len(shortcuts) != 9 { - t.Fatalf("expected 9 shortcuts, got %d", len(shortcuts)) + if len(shortcuts) != 10 { + t.Fatalf("expected 10 shortcuts, got %d", len(shortcuts)) } names := map[string]bool{} for _, s := range shortcuts { names[s.Command] = true } - for _, want := range []string{"+agenda", "+create", "+update", "+freebusy", "+room-find", "+rsvp", "+suggestion"} { + for _, want := range []string{"+agenda", "+create", "+update", "+freebusy", "+room-find", "+rsvp", "+suggestion", "+get"} { if !names[want] { t.Errorf("missing shortcut %s", want) } @@ -3108,3 +3178,193 @@ func TestSuggestion_RejectsDangerousTimezone_Typed(t *testing.T) { t.Errorf("param=%q, want --timezone", ve.Param) } } + +// --------------------------------------------------------------------------- +// CalendarGet tests +// --------------------------------------------------------------------------- + +func TestGet_Success_FlattensAndConvertsTimes(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/calendar/v4/calendars/cal_test123/events/evt_001", + Body: map[string]interface{}{ + "code": 0, "msg": "success", + "data": map[string]interface{}{ + "event": map[string]interface{}{ + "event_id": "evt_001", + "summary": "Daily Sync", + "create_time": "1602504000", + "start_time": map[string]interface{}{ + "timestamp": "1742515200", + "timezone": "Asia/Shanghai", + }, + "end_time": map[string]interface{}{ + "timestamp": "1742518800", + "timezone": "Asia/Shanghai", + }, + "status": "confirmed", + }, + }, + }, + }) + + err := mountAndRun(t, CalendarGet, []string{ + "+get", + "--calendar-id", "cal_test123", + "--event-id", "evt_001", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + out := stdout.String() + // Expect flattened — fields appear directly under "data", not under "data.event" + if strings.Contains(out, "\"event\": {") { + t.Errorf("payload should be flattened (no event wrapper), got: %s", out) + } + if !strings.Contains(out, "\"event_id\": \"evt_001\"") { + t.Errorf("expected event_id in output, got: %s", out) + } + // status=confirmed should be dropped + if strings.Contains(out, "\"status\": \"confirmed\"") { + t.Errorf("status should be dropped when not cancelled, got: %s", out) + } + // timestamp must be replaced with datetime + if strings.Contains(out, "\"timestamp\":") { + t.Errorf("timestamp should be replaced with datetime, got: %s", out) + } + if !strings.Contains(out, "\"datetime\":") { + t.Errorf("expected datetime in output, got: %s", out) + } + // create_time must be RFC3339 (contain 'T' and timezone) + if !strings.Contains(out, "\"create_time\": \"2020-10-12T") { + t.Errorf("expected RFC3339 create_time, got: %s", out) + } +} + +func TestGet_CancelledStatus_PreservesStatus(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/calendar/v4/calendars/cal_test123/events/evt_002", + Body: map[string]interface{}{ + "code": 0, "msg": "success", + "data": map[string]interface{}{ + "event": map[string]interface{}{ + "event_id": "evt_002", + "summary": "Cancelled Meeting", + "create_time": "1602504000", + "start_time": map[string]interface{}{"timestamp": "1742515200"}, + "end_time": map[string]interface{}{"timestamp": "1742518800"}, + "status": "cancelled", + }, + }, + }, + }) + + err := mountAndRun(t, CalendarGet, []string{ + "+get", + "--calendar-id", "cal_test123", + "--event-id", "evt_002", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + out := stdout.String() + if !strings.Contains(out, "\"status\": \"cancelled\"") { + t.Errorf("status should be preserved when cancelled, got: %s", out) + } +} + +func TestGet_AllDayEvent_AdjustsEndDate(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + + // All-day event: start 2025-03-21, end 2025-03-22 (exclusive in API). + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/calendar/v4/calendars/cal_test123/events/evt_003", + Body: map[string]interface{}{ + "code": 0, "msg": "success", + "data": map[string]interface{}{ + "event": map[string]interface{}{ + "event_id": "evt_003", + "summary": "All-day", + "start_time": map[string]interface{}{"date": "2025-03-21"}, + "end_time": map[string]interface{}{"date": "2025-03-22"}, + "status": "confirmed", + }, + }, + }, + }) + + err := mountAndRun(t, CalendarGet, []string{ + "+get", + "--calendar-id", "cal_test123", + "--event-id", "evt_003", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + out := stdout.String() + // end date 2025-03-22 should rewind by 1s -> 2025-03-21 + if !strings.Contains(out, "\"date\": \"2025-03-21\"") { + t.Errorf("expected end date adjusted to 2025-03-21, got: %s", out) + } +} + +func TestGet_EmptyEventID_Typed(t *testing.T) { + f, _, _, _ := cmdutil.TestFactory(t, defaultConfig()) + err := mountAndRun(t, CalendarGet, []string{ + "+get", + "--event-id", " ", + "--as", "bot", + }, f, nil) + if err == nil { + t.Fatal("want error for empty event-id") + } + var ve *errs.ValidationError + if !errors.As(err, &ve) { + t.Fatalf("want *errs.ValidationError, got %T", err) + } + if ve.Param != "--event-id" { + t.Errorf("param=%q, want --event-id", ve.Param) + } +} + +func TestGet_MissingEventField_TypedInternal(t *testing.T) { + f, _, _, reg := cmdutil.TestFactory(t, defaultConfig()) + + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/calendar/v4/calendars/cal_test123/events/evt_404", + Body: map[string]interface{}{ + "code": 0, "msg": "success", + "data": map[string]interface{}{}, + }, + }) + + err := mountAndRun(t, CalendarGet, []string{ + "+get", + "--calendar-id", "cal_test123", + "--event-id", "evt_404", + "--as", "bot", + }, f, nil) + if err == nil { + t.Fatal("want error when event field is missing") + } + var ie *errs.InternalError + if !errors.As(err, &ie) { + t.Fatalf("want *errs.InternalError, got %T", err) + } + if ie.Subtype != errs.SubtypeInvalidResponse { + t.Errorf("subtype=%q, want invalid_response", ie.Subtype) + } +} diff --git a/shortcuts/calendar/shortcuts.go b/shortcuts/calendar/shortcuts.go index b927bf78e..92b63f7f3 100644 --- a/shortcuts/calendar/shortcuts.go +++ b/shortcuts/calendar/shortcuts.go @@ -17,5 +17,6 @@ func Shortcuts() []common.Shortcut { CalendarSuggestion, CalendarMeeting, CalendarSearchEvent, + CalendarGet, } } diff --git a/shortcuts/doc/doc_media_upload.go b/shortcuts/doc/doc_media_upload.go index 67ef5341a..37d951515 100644 --- a/shortcuts/doc/doc_media_upload.go +++ b/shortcuts/doc/doc_media_upload.go @@ -23,8 +23,8 @@ var DocMediaUpload = common.Shortcut{ AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "file", Desc: "local file path (files > 20MB use multipart upload automatically)", Required: true}, - {Name: "parent-type", Desc: "parent type: docx_image | docx_file | whiteboard", Required: true}, - {Name: "parent-node", Desc: "parent node ID (block_id for docx, board_token for whiteboard)", Required: true}, + {Name: "parent-type", Desc: "parent type: docx_image | docx_file | whiteboard | mindnote_image", Required: true}, + {Name: "parent-node", Desc: "parent node ID (block_id for docx, board_token for whiteboard, mindnote token for mindnote)", Required: true}, {Name: "doc-id", Desc: "document ID (for drive_route_token)"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { diff --git a/shortcuts/doc/docs_history.go b/shortcuts/doc/docs_history.go new file mode 100644 index 000000000..86069b70f --- /dev/null +++ b/shortcuts/doc/docs_history.go @@ -0,0 +1,261 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package doc + +import ( + "context" + "fmt" + "net/http" + "strconv" + "strings" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/validate" + "github.com/larksuite/cli/shortcuts/common" +) + +type docsHistoryListSpec struct { + Doc documentRef + PageSize int + PageToken string +} + +type docsHistoryRevertSpec struct { + Doc documentRef + HistoryVersionID string + WaitTimeoutMs int +} + +type docsHistoryRevertStatusSpec struct { + Doc documentRef + TaskID string +} + +func parseDocsHistoryDocRef(raw, shortcut string) (documentRef, error) { + ref, err := parseDocumentRef(raw) + if err != nil { + return documentRef{}, err + } + if ref.Kind == "doc" { + return documentRef{}, errs.NewValidationError(errs.SubtypeInvalidArgument, "docs %s only supports docx documents; use a docx token/URL or a wiki URL that resolves to docx", shortcut).WithParam("--doc") + } + return ref, nil +} + +func validateDocsHistoryPageSize(pageSize int) error { + if pageSize < 1 || pageSize > 20 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "invalid --page-size %d: must be between 1 and 20", pageSize).WithParam("--page-size") + } + return nil +} + +func validateDocsHistoryVersionID(historyVersionID string) error { + version, err := strconv.ParseInt(strings.TrimSpace(historyVersionID), 10, 64) + if err != nil { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--history-version-id must be a positive integer string returned by docs +history-list").WithParam("--history-version-id").WithCause(err) + } + if version <= 0 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--history-version-id must be a positive integer string returned by docs +history-list").WithParam("--history-version-id") + } + return nil +} + +func validateDocsHistoryWaitTimeout(timeoutMs int) error { + if timeoutMs < 0 || timeoutMs > 30000 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "invalid --wait-timeout-ms %d: must be between 0 and 30000", timeoutMs).WithParam("--wait-timeout-ms") + } + return nil +} + +func docsHistoryListParams(spec docsHistoryListSpec) map[string]interface{} { + params := map[string]interface{}{ + "page_size": spec.PageSize, + } + if spec.PageToken != "" { + params["page_token"] = spec.PageToken + } + return params +} + +func docsHistoryRevertBody(spec docsHistoryRevertSpec) map[string]interface{} { + return map[string]interface{}{ + "history_version_id": spec.HistoryVersionID, + "wait_timeout_ms": spec.WaitTimeoutMs, + } +} + +func docsHistoryStatusParams(spec docsHistoryRevertStatusSpec) map[string]interface{} { + return map[string]interface{}{ + "task_id": spec.TaskID, + } +} + +func docsHistoryAPIPath(docToken, suffix string) string { + return fmt.Sprintf("/open-apis/docs_ai/v1/documents/%s/%s", validate.EncodePathSegment(docToken), suffix) +} + +var DocsHistoryList = common.Shortcut{ + Service: "docs", + Command: "+history-list", + Description: "List Lark document history versions", + Risk: "read", + Scopes: []string{"docx:document:readonly"}, + AuthTypes: []string{"user", "bot"}, + PostMount: installDocsShortcutHelp("+history-list"), + Flags: []common.Flag{ + {Name: "doc", Desc: "document URL or token", Required: true}, + {Name: "page-size", Type: "int", Default: "20", Desc: "history entries to return, range 1-20"}, + {Name: "page-token", Desc: "pagination token from the previous page's page_token"}, + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + if _, err := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-list"); err != nil { + return err + } + return validateDocsHistoryPageSize(runtime.Int("page-size")) + }, + DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + ref, _ := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-list") + spec := docsHistoryListSpec{ + Doc: ref, + PageSize: runtime.Int("page-size"), + PageToken: strings.TrimSpace(runtime.Str("page-token")), + } + return common.NewDryRunAPI(). + Desc("OpenAPI: list document history versions"). + GET("/open-apis/docs_ai/v1/documents/:document_id/histories"). + Set("document_id", spec.Doc.Token). + Params(docsHistoryListParams(spec)) + }, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + ref, _ := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-list") + spec := docsHistoryListSpec{ + Doc: ref, + PageSize: runtime.Int("page-size"), + PageToken: strings.TrimSpace(runtime.Str("page-token")), + } + + data, err := runtime.CallAPITyped( + http.MethodGet, + docsHistoryAPIPath(spec.Doc.Token, "histories"), + docsHistoryListParams(spec), + nil, + ) + if err != nil { + return err + } + runtime.OutRaw(data, nil) + return nil + }, +} + +var DocsHistoryRevert = common.Shortcut{ + Service: "docs", + Command: "+history-revert", + Description: "Revert a Lark document to a historical version", + Risk: "write", + Scopes: []string{"docx:document:write_only", "docx:document:readonly"}, + AuthTypes: []string{"user", "bot"}, + PostMount: installDocsShortcutHelp("+history-revert"), + Flags: []common.Flag{ + {Name: "doc", Desc: "document URL or token", Required: true}, + {Name: "history-version-id", Desc: "history_version_id from docs +history-list to revert to", Required: true}, + {Name: "wait-timeout-ms", Type: "int", Default: "30000", Desc: "milliseconds to wait for revert completion before returning, range 0-30000"}, + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + if _, err := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-revert"); err != nil { + return err + } + if err := validateDocsHistoryVersionID(runtime.Str("history-version-id")); err != nil { + return err + } + return validateDocsHistoryWaitTimeout(runtime.Int("wait-timeout-ms")) + }, + DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + ref, _ := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-revert") + spec := docsHistoryRevertSpec{ + Doc: ref, + HistoryVersionID: strings.TrimSpace(runtime.Str("history-version-id")), + WaitTimeoutMs: runtime.Int("wait-timeout-ms"), + } + return common.NewDryRunAPI(). + Desc("OpenAPI: revert document history"). + POST("/open-apis/docs_ai/v1/documents/:document_id/history/revert"). + Set("document_id", spec.Doc.Token). + Body(docsHistoryRevertBody(spec)) + }, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + ref, _ := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-revert") + spec := docsHistoryRevertSpec{ + Doc: ref, + HistoryVersionID: strings.TrimSpace(runtime.Str("history-version-id")), + WaitTimeoutMs: runtime.Int("wait-timeout-ms"), + } + + data, err := runtime.CallAPITyped( + http.MethodPost, + docsHistoryAPIPath(spec.Doc.Token, "history/revert"), + nil, + docsHistoryRevertBody(spec), + ) + if err != nil { + return err + } + runtime.OutRaw(data, nil) + return nil + }, +} + +var DocsHistoryRevertStatus = common.Shortcut{ + Service: "docs", + Command: "+history-revert-status", + Description: "Get Lark document history revert task status", + Risk: "read", + Scopes: []string{"docx:document:readonly"}, + AuthTypes: []string{"user", "bot"}, + PostMount: installDocsShortcutHelp("+history-revert-status"), + Flags: []common.Flag{ + {Name: "doc", Desc: "document URL or token", Required: true}, + {Name: "task-id", Desc: "task_id returned by docs +history-revert", Required: true}, + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + if _, err := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-revert-status"); err != nil { + return err + } + if strings.TrimSpace(runtime.Str("task-id")) == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--task-id is required").WithParam("--task-id") + } + return nil + }, + DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + ref, _ := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-revert-status") + spec := docsHistoryRevertStatusSpec{ + Doc: ref, + TaskID: strings.TrimSpace(runtime.Str("task-id")), + } + return common.NewDryRunAPI(). + Desc("OpenAPI: get document history revert status"). + GET("/open-apis/docs_ai/v1/documents/:document_id/history/revert_status"). + Set("document_id", spec.Doc.Token). + Params(docsHistoryStatusParams(spec)) + }, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + ref, _ := parseDocsHistoryDocRef(runtime.Str("doc"), "+history-revert-status") + spec := docsHistoryRevertStatusSpec{ + Doc: ref, + TaskID: strings.TrimSpace(runtime.Str("task-id")), + } + + data, err := runtime.CallAPITyped( + http.MethodGet, + docsHistoryAPIPath(spec.Doc.Token, "history/revert_status"), + docsHistoryStatusParams(spec), + nil, + ) + if err != nil { + return err + } + runtime.OutRaw(data, nil) + return nil + }, +} diff --git a/shortcuts/doc/docs_history_test.go b/shortcuts/doc/docs_history_test.go new file mode 100644 index 000000000..1df141260 --- /dev/null +++ b/shortcuts/doc/docs_history_test.go @@ -0,0 +1,340 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package doc + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "strings" + "testing" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/cmdutil" + "github.com/larksuite/cli/internal/httpmock" + "github.com/larksuite/cli/shortcuts/common" + "github.com/spf13/cobra" +) + +func TestDocsHistoryValidation(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + shortcut common.Shortcut + args []string + param string + category errs.Category + subtype errs.Subtype + wantCause bool + }{ + { + name: "list rejects legacy doc URL", + shortcut: DocsHistoryList, + args: []string{"+history-list", "--doc", "https://example.feishu.cn/doc/old_doc", "--as", "bot"}, + param: "--doc", + category: errs.CategoryValidation, + subtype: errs.SubtypeInvalidArgument, + }, + { + name: "list rejects invalid page size", + shortcut: DocsHistoryList, + args: []string{"+history-list", "--doc", "doxcnHistory", "--page-size", "0", "--as", "bot"}, + param: "--page-size", + category: errs.CategoryValidation, + subtype: errs.SubtypeInvalidArgument, + }, + { + name: "revert rejects non-numeric history version id", + shortcut: DocsHistoryRevert, + args: []string{"+history-revert", "--doc", "doxcnHistory", "--history-version-id", "abc", "--as", "bot"}, + param: "--history-version-id", + category: errs.CategoryValidation, + subtype: errs.SubtypeInvalidArgument, + wantCause: true, + }, + { + name: "revert rejects non-positive history version id", + shortcut: DocsHistoryRevert, + args: []string{"+history-revert", "--doc", "doxcnHistory", "--history-version-id", "0", "--as", "bot"}, + param: "--history-version-id", + category: errs.CategoryValidation, + subtype: errs.SubtypeInvalidArgument, + }, + { + name: "revert rejects invalid wait timeout", + shortcut: DocsHistoryRevert, + args: []string{"+history-revert", "--doc", "doxcnHistory", "--history-version-id", "10", "--wait-timeout-ms", "30001", "--as", "bot"}, + param: "--wait-timeout-ms", + category: errs.CategoryValidation, + subtype: errs.SubtypeInvalidArgument, + }, + { + name: "status rejects empty task id", + shortcut: DocsHistoryRevertStatus, + args: []string{"+history-revert-status", "--doc", "doxcnHistory", "--task-id", "", "--as", "bot"}, + param: "--task-id", + category: errs.CategoryValidation, + subtype: errs.SubtypeInvalidArgument, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + f, stdout, _, _ := cmdutil.TestFactory(t, docsTestConfigWithAppID("docs-history-validation")) + err := mountAndRunDocs(t, tt.shortcut, tt.args, f, stdout) + if err == nil { + t.Fatal("expected validation error, got nil") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("error is not typed: %T %v", err, err) + } + if problem.Category != tt.category { + t.Fatalf("category = %q, want %q (err: %v)", problem.Category, tt.category, err) + } + if problem.Subtype != tt.subtype { + t.Fatalf("subtype = %q, want %q (err: %v)", problem.Subtype, tt.subtype, err) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected validation error, got %T: %v", err, err) + } + if validationErr.Param != tt.param { + t.Fatalf("param = %q, want %q (err: %v)", validationErr.Param, tt.param, err) + } + if tt.wantCause && errors.Unwrap(err) == nil { + t.Fatalf("expected wrapped cause, got nil (err: %v)", err) + } + }) + } +} + +func TestDocsHistoryDryRun(t *testing.T) { + t.Parallel() + + listCmd := newDocsHistoryRuntimeCmd(t, DocsHistoryList, map[string]string{ + "doc": "doxcnHistoryDryRun", + "page-size": "5", + "page-token": "page_token_1", + }) + listDry := decodeDocDryRun(t, DocsHistoryList.DryRun(context.Background(), common.TestNewRuntimeContext(listCmd, nil))) + if got, want := listDry.API[0].URL, "/open-apis/docs_ai/v1/documents/doxcnHistoryDryRun/histories"; got != want { + t.Fatalf("list dry-run URL = %q, want %q", got, want) + } + if got := int(listDry.API[0].Params["page_size"].(float64)); got != 5 { + t.Fatalf("list page_size = %d, want 5", got) + } + if got := listDry.API[0].Params["page_token"]; got != "page_token_1" { + t.Fatalf("list page_token = %#v, want page_token_1", got) + } + + revertCmd := newDocsHistoryRuntimeCmd(t, DocsHistoryRevert, map[string]string{ + "doc": "doxcnHistoryDryRun", + "history-version-id": "42", + "wait-timeout-ms": "30000", + }) + revertDry := decodeDocDryRun(t, DocsHistoryRevert.DryRun(context.Background(), common.TestNewRuntimeContext(revertCmd, nil))) + if got, want := revertDry.API[0].URL, "/open-apis/docs_ai/v1/documents/doxcnHistoryDryRun/history/revert"; got != want { + t.Fatalf("revert dry-run URL = %q, want %q", got, want) + } + if got := revertDry.API[0].Body["history_version_id"]; got != "42" { + t.Fatalf("revert history_version_id = %#v, want 42", got) + } + if got := int(revertDry.API[0].Body["wait_timeout_ms"].(float64)); got != 30000 { + t.Fatalf("revert wait_timeout_ms = %d, want 30000", got) + } + + statusCmd := newDocsHistoryRuntimeCmd(t, DocsHistoryRevertStatus, map[string]string{ + "doc": "doxcnHistoryDryRun", + "task-id": "task_1", + }) + statusDry := decodeDocDryRun(t, DocsHistoryRevertStatus.DryRun(context.Background(), common.TestNewRuntimeContext(statusCmd, nil))) + if got, want := statusDry.API[0].URL, "/open-apis/docs_ai/v1/documents/doxcnHistoryDryRun/history/revert_status"; got != want { + t.Fatalf("status dry-run URL = %q, want %q", got, want) + } + if got := statusDry.API[0].Params["task_id"]; got != "task_1" { + t.Fatalf("status task_id = %#v, want task_1", got) + } +} + +func TestDocsHistoryExecuteList(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, docsTestConfigWithAppID("docs-history-list")) + stub := &httpmock.Stub{ + Method: "GET", + URL: "/open-apis/docs_ai/v1/documents/doxcnHistory/histories", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "entries": []interface{}{ + map[string]interface{}{ + "revision_id": float64(42), + "history_version_id": "11", + "edit_time": "1780000000", + "type": float64(1), + "editor_ids": []interface{}{"ou_1"}, + }, + }, + "has_more": true, + "page_token": "page_token_2", + }, + }, + } + reg.Register(stub) + + err := mountAndRunDocs(t, DocsHistoryList, []string{ + "+history-list", + "--doc", "doxcnHistory", + "--page-size", "5", + "--page-token", "page_token_1", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + data := decodeDocsHistoryEnvelope(t, stdout) + if got := data["page_token"]; got != "page_token_2" { + t.Fatalf("page_token = %#v, want page_token_2", got) + } + entries, _ := data["entries"].([]interface{}) + if len(entries) != 1 { + t.Fatalf("entries = %#v, want one entry", data["entries"]) + } +} + +func TestDocsHistoryExecuteRevert(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, docsTestConfigWithAppID("docs-history-revert")) + stub := &httpmock.Stub{ + Method: "POST", + URL: "/open-apis/docs_ai/v1/documents/doxcnHistory/history/revert", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "task_id": "task_1", + "status": "running", + "history_version_id": "42", + "poll_after_ms": float64(10000), + }, + }, + } + reg.Register(stub) + + err := mountAndRunDocs(t, DocsHistoryRevert, []string{ + "+history-revert", + "--doc", "doxcnHistory", + "--history-version-id", "42", + "--wait-timeout-ms", "0", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + var body map[string]interface{} + if err := json.Unmarshal(stub.CapturedBody, &body); err != nil { + t.Fatalf("decode revert body: %v\nraw=%s", err, stub.CapturedBody) + } + if got := body["history_version_id"]; got != "42" { + t.Fatalf("history_version_id = %#v, want 42", got) + } + if got := int(body["wait_timeout_ms"].(float64)); got != 0 { + t.Fatalf("wait_timeout_ms = %d, want 0", got) + } + + data := decodeDocsHistoryEnvelope(t, stdout) + if got := data["task_id"]; got != "task_1" { + t.Fatalf("task_id = %#v, want task_1", got) + } +} + +func TestDocsHistoryExecuteRevertStatus(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, docsTestConfigWithAppID("docs-history-status")) + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/docs_ai/v1/documents/doxcnHistory/history/revert_status", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "status": "partial_failed", + "history_version_id": "11", + "failed_block_tokens": []interface{}{"blk_1"}, + }, + }, + }) + + err := mountAndRunDocs(t, DocsHistoryRevertStatus, []string{ + "+history-revert-status", + "--doc", "doxcnHistory", + "--task-id", "task_1", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + data := decodeDocsHistoryEnvelope(t, stdout) + if got := data["status"]; got != "partial_failed" { + t.Fatalf("status = %#v, want partial_failed", got) + } + if got := data["history_version_id"]; got != "11" { + t.Fatalf("history_version_id = %#v, want 11", got) + } + failed, _ := data["failed_block_tokens"].([]interface{}) + if len(failed) != 1 || failed[0] != "blk_1" { + t.Fatalf("failed_block_tokens = %#v, want [blk_1]", data["failed_block_tokens"]) + } +} + +func newDocsHistoryRuntimeCmd(t *testing.T, shortcut common.Shortcut, values map[string]string) *cobra.Command { + t.Helper() + + cmd := &cobra.Command{Use: shortcut.Command} + for _, flag := range shortcut.Flags { + switch flag.Type { + case "int": + cmd.Flags().Int(flag.Name, 0, flag.Desc) + default: + cmd.Flags().String(flag.Name, flag.Default, flag.Desc) + } + } + for name, value := range values { + if err := cmd.Flags().Set(name, value); err != nil { + t.Fatalf("set --%s: %v", name, err) + } + } + return cmd +} + +func decodeDocsHistoryEnvelope(t *testing.T, stdout *bytes.Buffer) map[string]interface{} { + t.Helper() + + var envelope map[string]interface{} + if err := json.Unmarshal(stdout.Bytes(), &envelope); err != nil { + t.Fatalf("decode envelope: %v\nraw=%s", err, stdout.String()) + } + data, _ := envelope["data"].(map[string]interface{}) + if data == nil { + t.Fatalf("missing data in envelope: %#v", envelope) + } + return data +} + +func TestDocsHistoryURLValidationMessage(t *testing.T) { + t.Parallel() + + _, err := parseDocsHistoryDocRef("https://example.feishu.cn/doc/old_doc", "+history-list") + if err == nil { + t.Fatal("expected error") + } + if !strings.Contains(err.Error(), "only supports docx documents") { + t.Fatalf("unexpected error: %v", err) + } +} diff --git a/shortcuts/doc/html5_block_resources.go b/shortcuts/doc/html5_block_resources.go index 80955ba58..21fbc01ee 100644 --- a/shortcuts/doc/html5_block_resources.go +++ b/shortcuts/doc/html5_block_resources.go @@ -27,12 +27,17 @@ const ( html5BlockDataAttr = "data" html5BlockReferenceRoot = "doc-fetch-resources" html5BlockReferenceMaxRaw = 1024 + + whiteboardTag = "whiteboard" + whiteboardTypeAttr = "type" + whiteboardPathAttr = "path" ) var ( html5BlockStartTagPattern = regexp.MustCompile(`(?is)]*>`) html5BlockElementPattern = regexp.MustCompile(`(?is)]*>(.*?)`) html5BlockSafeNamePattern = regexp.MustCompile(`^[A-Za-z0-9._-]+$`) + whiteboardElementPattern = regexp.MustCompile(`(?is)]*(?:/>|>.*?)`) ) type html5BlockReferenceEntry struct { @@ -58,6 +63,11 @@ type html5BlockStartTag struct { SelfClosing bool } +type whiteboardStartTag struct { + Attrs []html5BlockAttr + SelfClosing bool +} + func buildCreateBodyWithHTML5ReferenceMap(runtime *common.RuntimeContext) (map[string]interface{}, error) { body := buildCreateBody(runtime) if runtime.Str("content") == "" && !runtime.Changed("reference-map") { @@ -115,7 +125,11 @@ func prepareDocsV2WriteInput(runtime *common.RuntimeContext, input docsV2WriteIn return docsV2WriteInput{}, err } - content, html5RefMap, err := prepareHTML5BlockWriteContent(runtime, runtime.Str("doc-format"), input.Content, html5RefMap) + content, err := prepareWhiteboardWriteContent(runtime, runtime.Str("doc-format"), input.Content) + if err != nil { + return docsV2WriteInput{}, err + } + content, html5RefMap, err = prepareHTML5BlockWriteContent(runtime, runtime.Str("doc-format"), content, html5RefMap) if err != nil { return docsV2WriteInput{}, err } @@ -232,6 +246,248 @@ func prepareHTML5BlockWriteContent(runtime *common.RuntimeContext, format string return out, compactReferenceMap(refMap), nil } +func prepareWhiteboardWriteContent(runtime *common.RuntimeContext, format string, content string) (string, error) { + if !strings.Contains(content, " 0 { + return "", aggregateWhiteboardRewriteErrors(rewriteErrs) + } + return out, nil +} + +func rewriteWhiteboardFileRefs(runtime *common.RuntimeContext, content string) (string, error) { + var rewriteErrs []error + out := whiteboardElementPattern.ReplaceAllStringFunc(content, func(raw string) string { + rewritten, err := rewriteWhiteboardFileRef(runtime, raw) + if err != nil { + rewriteErrs = append(rewriteErrs, err) + return raw + } + return rewritten + }) + if len(rewriteErrs) > 0 { + return "", aggregateWhiteboardRewriteErrors(rewriteErrs) + } + return out, nil +} + +func rewriteWhiteboardFileRef(runtime *common.RuntimeContext, raw string) (string, error) { + startRaw, body, _, ok := splitWhiteboardElement(raw) + if !ok { + return raw, nil + } + tag, err := parseWhiteboardStartTag(startRaw) + if err != nil { + return "", common.ValidationErrorf("invalid whiteboard tag: %v", err).WithParam("whiteboard") + } + + pathValue, hasPath := tag.attr(whiteboardPathAttr) + bodyPath, hasBodyPath := whiteboardBodyPathRef(body) + if !hasPath && !hasBodyPath { + return raw, nil + } + if hasPath && strings.TrimSpace(body) != "" { + return "", common.ValidationErrorf("whiteboard cannot contain both path and inline content").WithParam("whiteboard") + } + if hasPath && hasBodyPath { + return "", common.ValidationErrorf("whiteboard cannot contain both path and @file body").WithParam("whiteboard") + } + + typRaw, ok := tag.attr(whiteboardTypeAttr) + if !ok || strings.TrimSpace(typRaw) == "" { + return "", common.ValidationErrorf("whiteboard file input requires type=\"svg\", type=\"mermaid\", or type=\"plantuml\"").WithParam("type") + } + typ, ok := canonicalWhiteboardFileType(typRaw) + if !ok { + return "", common.ValidationErrorf("whiteboard file input only supports type=\"svg\", type=\"mermaid\", or type=\"plantuml\", got %q", typRaw).WithParam("type") + } + + if hasBodyPath { + pathValue = bodyPath + } + data, err := readWhiteboardPath(runtime, pathValue, typ) + if err != nil { + return "", err + } + + tag.setAttr(whiteboardTypeAttr, typ) + tag.removeAttrs(whiteboardPathAttr) + return tag.render(false) + whiteboardContentForType(typ, data) + "", nil +} + +func splitWhiteboardElement(raw string) (startTag string, body string, selfClosing bool, ok bool) { + trimmed := strings.TrimSpace(raw) + selfClosing = strings.HasSuffix(trimmed, "/>") + if selfClosing { + return raw, "", true, true + } + startEnd := strings.Index(raw, ">") + if startEnd < 0 { + return "", "", false, false + } + endStart := strings.LastIndex(strings.ToLower(raw), "") + if endStart < 0 || endStart < startEnd { + return "", "", false, false + } + return raw[:startEnd+1], raw[startEnd+1 : endStart], false, true +} + +func whiteboardBodyPathRef(body string) (string, bool) { + trimmed := strings.TrimSpace(body) + if !strings.HasPrefix(trimmed, "@") || strings.HasPrefix(trimmed, "@@") { + return "", false + } + if strings.ContainsAny(trimmed, "\r\n") { + return "", false + } + return trimmed, true +} + +func canonicalWhiteboardFileType(raw string) (string, bool) { + switch strings.ToLower(strings.TrimSpace(raw)) { + case "svg": + return "svg", true + case "mermaid": + return "mermaid", true + case "plantuml": + return "plantuml", true + default: + return "", false + } +} + +func readWhiteboardPath(runtime *common.RuntimeContext, pathValue string, typ string) (string, error) { + pathRaw := strings.TrimSpace(pathValue) + if !strings.HasPrefix(pathRaw, "@") { + return "", common.ValidationErrorf("whiteboard %s path %q must start with @, for example @diagram.%s", typ, pathValue, exampleWhiteboardExt(typ)).WithParam("path") + } + relPath := strings.TrimSpace(strings.TrimPrefix(pathRaw, "@")) + if relPath == "" { + return "", common.ValidationErrorf("whiteboard %s path cannot be empty after @", typ).WithParam("path") + } + clean := filepath.Clean(relPath) + if filepath.IsAbs(clean) || clean == "." || clean == ".." || strings.HasPrefix(clean, ".."+string(filepath.Separator)) { + return "", common.ValidationErrorf("whiteboard %s path %q must be a relative path within the current working directory", typ, pathValue).WithParam("path") + } + if !whiteboardExtAllowed(typ, strings.ToLower(filepath.Ext(clean))) { + return "", common.ValidationErrorf("whiteboard %s path %q must point to a %s file", typ, pathValue, whiteboardExtList(typ)).WithParam("path") + } + data, err := cmdutil.ReadInputFile(runtime.FileIO(), clean) + if err != nil { + return "", common.ValidationErrorf("whiteboard %s path %q cannot be read from the current working directory; check that the file exists relative to where lark-cli is running: %v", typ, clean, err). + WithParam("path"). + WithParams(errs.InvalidParam{Name: clean, Reason: fmt.Sprintf("whiteboard %s path cannot be read", typ)}). + WithCause(err) + } + return string(data), nil +} + +func whiteboardExtAllowed(typ string, ext string) bool { + for _, allowed := range whiteboardAllowedExts(typ) { + if ext == allowed { + return true + } + } + return false +} + +func whiteboardAllowedExts(typ string) []string { + switch typ { + case "svg": + return []string{".svg"} + case "mermaid": + return []string{".mermaid", ".mmd"} + case "plantuml": + return []string{".plantuml", ".puml", ".pu", ".uml"} + default: + return nil + } +} + +func whiteboardExtList(typ string) string { + return strings.Join(whiteboardAllowedExts(typ), ", ") +} + +func exampleWhiteboardExt(typ string) string { + exts := whiteboardAllowedExts(typ) + if len(exts) == 0 { + return "txt" + } + return strings.TrimPrefix(exts[0], ".") +} + +func whiteboardContentForType(typ string, data string) string { + if typ == "svg" { + return data + } + return escapeXMLText(data) +} + +func aggregateWhiteboardRewriteErrors(rewriteErrs []error) error { + flatErrs := flattenWhiteboardRewriteErrors(rewriteErrs) + messages := make([]string, 0, len(flatErrs)) + params := make([]errs.InvalidParam, 0, len(flatErrs)) + for _, err := range flatErrs { + messages = append(messages, err.Error()) + params = append(params, whiteboardInvalidParamsFromError(err)...) + } + validationErr := common.ValidationErrorf("whiteboard file input failed: %s", strings.Join(messages, "; ")). + WithParam("whiteboard"). + WithCause(errors.Join(flatErrs...)) + if len(params) > 0 { + validationErr.WithParams(params...) + } + return validationErr +} + +func flattenWhiteboardRewriteErrors(rewriteErrs []error) []error { + flatErrs := make([]error, 0, len(rewriteErrs)) + for _, err := range rewriteErrs { + var validationErr *errs.ValidationError + if errors.As(err, &validationErr) && validationErr.Param == "whiteboard" && validationErr.Cause != nil { + if joined, ok := validationErr.Cause.(interface{ Unwrap() []error }); ok { + flatErrs = append(flatErrs, flattenWhiteboardRewriteErrors(joined.Unwrap())...) + continue + } + } + flatErrs = append(flatErrs, err) + } + return flatErrs +} + +func whiteboardInvalidParamsFromError(err error) []errs.InvalidParam { + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + return nil + } + if len(validationErr.Params) > 0 { + return validationErr.Params + } + if validationErr.Param != "" { + return []errs.InvalidParam{{Name: validationErr.Param, Reason: validationErr.Message}} + } + return nil +} + func validateHTML5BlockWriteElementBodies(format string, content string) error { validateSegment := func(segment string) error { matches := html5BlockElementPattern.FindAllStringSubmatchIndex(segment, -1) @@ -621,6 +877,34 @@ func parseHTML5BlockStartTag(raw string) (html5BlockStartTag, error) { return html5BlockStartTag{}, fmt.Errorf("missing start element") //nolint:forbidigo // intermediate parse helper; callers wrap with typed validation errors. } +func parseWhiteboardStartTag(raw string) (whiteboardStartTag, error) { + trimmed := strings.TrimSpace(raw) + selfClosing := strings.HasSuffix(trimmed, "/>") + decoder := xml.NewDecoder(strings.NewReader(raw)) + for { + tok, err := decoder.Token() + if err != nil { + if errors.Is(err, io.EOF) { + break + } + return whiteboardStartTag{}, err + } + start, ok := tok.(xml.StartElement) + if !ok { + continue + } + if start.Name.Local != whiteboardTag { + return whiteboardStartTag{}, fmt.Errorf("expected <%s>, got <%s>", whiteboardTag, start.Name.Local) //nolint:forbidigo // intermediate parse helper; callers wrap with typed validation errors. + } + attrs := make([]html5BlockAttr, 0, len(start.Attr)) + for _, attr := range start.Attr { + attrs = append(attrs, html5BlockAttr{Name: attr.Name.Local, Value: attr.Value}) + } + return whiteboardStartTag{Attrs: attrs, SelfClosing: selfClosing}, nil + } + return whiteboardStartTag{}, fmt.Errorf("missing start element") //nolint:forbidigo // intermediate parse helper; callers wrap with typed validation errors. +} + func (t html5BlockStartTag) attr(name string) (string, bool) { for _, attr := range t.Attrs { if attr.Name == name { @@ -630,6 +914,15 @@ func (t html5BlockStartTag) attr(name string) (string, bool) { return "", false } +func (t whiteboardStartTag) attr(name string) (string, bool) { + for _, attr := range t.Attrs { + if attr.Name == name { + return attr.Value, true + } + } + return "", false +} + func (t html5BlockStartTag) hasAttr(name string) bool { _, ok := t.attr(name) return ok @@ -650,6 +943,31 @@ func (t *html5BlockStartTag) removeAttrs(names ...string) { t.Attrs = attrs } +func (t *whiteboardStartTag) removeAttrs(names ...string) { + remove := make(map[string]struct{}, len(names)) + for _, name := range names { + remove[name] = struct{}{} + } + attrs := t.Attrs[:0] + for _, attr := range t.Attrs { + if _, ok := remove[attr.Name]; ok { + continue + } + attrs = append(attrs, attr) + } + t.Attrs = attrs +} + +func (t *whiteboardStartTag) setAttr(name string, value string) { + for i, attr := range t.Attrs { + if attr.Name == name { + t.Attrs[i].Value = value + return + } + } + t.Attrs = append(t.Attrs, html5BlockAttr{Name: name, Value: value}) +} + func (t html5BlockStartTag) render(selfClosing bool) string { var b strings.Builder b.WriteByte('<') @@ -674,6 +992,25 @@ func (t html5BlockStartTag) render(selfClosing bool) string { return b.String() } +func (t whiteboardStartTag) render(selfClosing bool) string { + var b strings.Builder + b.WriteByte('<') + b.WriteString(whiteboardTag) + for _, attr := range t.Attrs { + b.WriteByte(' ') + b.WriteString(attr.Name) + b.WriteString(`="`) + b.WriteString(escapeXMLAttr(attr.Value)) + b.WriteByte('"') + } + if selfClosing { + b.WriteString("/>") + } else { + b.WriteByte('>') + } + return b.String() +} + func escapeXMLAttr(value string) string { var b strings.Builder for _, r := range value { @@ -694,3 +1031,18 @@ func escapeXMLAttr(value string) string { } return b.String() } + +func escapeXMLText(value string) string { + var b strings.Builder + for _, r := range value { + switch r { + case '&': + b.WriteString("&") + case '<': + b.WriteString("<") + default: + b.WriteRune(r) + } + } + return b.String() +} diff --git a/shortcuts/doc/html5_block_resources_test.go b/shortcuts/doc/html5_block_resources_test.go index 1da3f10d4..413a0e8e9 100644 --- a/shortcuts/doc/html5_block_resources_test.go +++ b/shortcuts/doc/html5_block_resources_test.go @@ -6,11 +6,13 @@ package doc import ( "bytes" "encoding/json" + "errors" "os" "path/filepath" "strings" "testing" + "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/cmdutil" "github.com/larksuite/cli/internal/httpmock" "github.com/larksuite/cli/shortcuts/common" @@ -116,6 +118,61 @@ func TestDocsCreateV2HTML5BlockReferenceMapFromPath(t *testing.T) { } } +func TestDocsCreateV2WhiteboardFileInputs(t *testing.T) { + dir := t.TempDir() + cmdutil.TestChdir(t, dir) + files := map[string]string{ + "diagram.svg": `A`, + "flow.mmd": "flowchart TD\nA --> B", + "sequence.puml": "@startuml\nAlice -> Bob: hi\n@enduml", + } + for name, content := range files { + if err := os.WriteFile(name, []byte(content), 0o600); err != nil { + t.Fatalf("WriteFile(%s) error: %v", name, err) + } + } + + f, stdout, _, reg := cmdutil.TestFactory(t, docsCreateTestConfig(t, "")) + stub := registerDocsAIStub(reg, "POST", "/open-apis/docs_ai/v1/documents", map[string]interface{}{ + "document": map[string]interface{}{ + "document_id": "doxcn_new_doc", + "revision_id": float64(1), + }, + }) + + err := runDocsCreateShortcut(t, f, stdout, []string{ + "+create", + "--api-version", "v2", + "--content", strings.Join([]string{ + ``, + `@flow.mmd`, + ``, + }, "\n"), + "--as", "user", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + body := decodeRequestBody(t, stub.CapturedBody) + got := body["content"].(string) + for _, want := range []string{ + `A`, + "flowchart TD\nA --> B", + "@startuml\nAlice -> Bob: hi\n@enduml", + } { + if !strings.Contains(got, want) { + t.Fatalf("content missing %q:\n%s", want, got) + } + } + if strings.Contains(got, `path="@`) { + t.Fatalf("content still contains whiteboard path attr: %s", got) + } + if _, ok := body["reference_map"]; ok { + t.Fatalf("whiteboard file input must not create reference_map: %#v", body) + } +} + func findDocsTestFlag(flags []common.Flag, name string) common.Flag { for _, flag := range flags { if flag.Name == name { @@ -407,6 +464,119 @@ func TestDocsCreateV2HTML5BlockPathReadFailure(t *testing.T) { } } +func TestDocsCreateV2WhiteboardFileInputReportsAllMissingPaths(t *testing.T) { + dir := t.TempDir() + cmdutil.TestChdir(t, dir) + f, stdout, _, _ := cmdutil.TestFactory(t, docsCreateTestConfig(t, "")) + + err := runDocsCreateShortcut(t, f, stdout, []string{ + "+create", + "--api-version", "v2", + "--content", strings.Join([]string{ + ``, + `@missing.mmd`, + ``, + }, "\n"), + "--as", "user", + }) + if err == nil { + t.Fatal("expected aggregated whiteboard path error") + } + assertWhiteboardFileInputValidation(t, err, []string{ + "missing.svg", + "missing.mmd", + "missing.puml", + }, []string{ + `whiteboard svg path "missing.svg" cannot be read`, + `whiteboard mermaid path "missing.mmd" cannot be read`, + `whiteboard plantuml path "missing.puml" cannot be read`, + }) +} + +func TestDocsCreateV2WhiteboardFileInputMarkdownReportsMissingPathsAcrossFences(t *testing.T) { + dir := t.TempDir() + cmdutil.TestChdir(t, dir) + f, stdout, _, _ := cmdutil.TestFactory(t, docsCreateTestConfig(t, "")) + + err := runDocsCreateShortcut(t, f, stdout, []string{ + "+create", + "--api-version", "v2", + "--doc-format", "markdown", + "--content", strings.Join([]string{ + ``, + "```", + ``, + "```", + ``, + }, "\n"), + "--as", "user", + }) + if err == nil { + t.Fatal("expected aggregated whiteboard path error") + } + assertWhiteboardFileInputValidation(t, err, []string{ + "before.svg", + "after.puml", + }, []string{ + `whiteboard svg path "before.svg" cannot be read`, + `whiteboard plantuml path "after.puml" cannot be read`, + }) + if strings.Contains(err.Error(), "inside.svg") { + t.Fatalf("error should ignore fenced whiteboard path, got: %v", err) + } +} + +func assertWhiteboardFileInputValidation(t *testing.T, err error, wantParams []string, wantMessages []string) { + t.Helper() + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed problem, got %T %v", err, err) + } + if problem.Category != errs.CategoryValidation || problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("category/subtype = %s/%s, want %s/%s", problem.Category, problem.Subtype, errs.CategoryValidation, errs.SubtypeInvalidArgument) + } + + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got %T %v", err, err) + } + if validationErr.Param != "whiteboard" { + t.Fatalf("param = %q, want whiteboard", validationErr.Param) + } + if validationErr.Cause == nil { + t.Fatal("expected aggregated error to preserve cause") + } + var childValidationErr *errs.ValidationError + if !errors.As(validationErr.Cause, &childValidationErr) || childValidationErr.Cause == nil { + t.Fatalf("expected child validation cause to preserve file read cause, got %#v", validationErr.Cause) + } + + gotParams := make(map[string]string, len(validationErr.Params)) + for _, param := range validationErr.Params { + gotParams[param.Name] = param.Reason + } + if len(gotParams) != len(wantParams) { + t.Fatalf("params = %#v, want names %v", validationErr.Params, wantParams) + } + for _, param := range wantParams { + reason, ok := gotParams[param] + if !ok { + t.Fatalf("params = %#v, want name %q", validationErr.Params, param) + } + if reason == "" { + t.Fatalf("param %q missing reason: %#v", param, validationErr.Params) + } + } + for _, want := range wantMessages { + if !strings.Contains(err.Error(), want) { + t.Fatalf("error missing %q:\n%v", want, err) + } + if !strings.Contains(validationErr.Cause.Error(), want) { + t.Fatalf("cause missing %q:\n%v", want, validationErr.Cause) + } + } +} + func TestDocsCreateV2HTML5BlockRejectsInlineContent(t *testing.T) { dir := t.TempDir() cmdutil.TestChdir(t, dir) diff --git a/shortcuts/doc/shortcuts.go b/shortcuts/doc/shortcuts.go index a4e9781f6..25c4e61c9 100644 --- a/shortcuts/doc/shortcuts.go +++ b/shortcuts/doc/shortcuts.go @@ -31,6 +31,8 @@ func docsSkillReadCommandForShortcut(shortcut string) string { return docsSkillReadCommand + " references/lark-doc-fetch.md" case "update": return docsSkillReadCommand + " references/lark-doc-update.md" + case "history-list", "history-revert", "history-revert-status": + return docsSkillReadCommand + " references/lark-doc-history.md" default: return docsSkillReadCommand } @@ -44,6 +46,12 @@ func docsHelpCommandForShortcut(shortcut string) string { return "lark-cli docs +fetch --help" case "update": return "lark-cli docs +update --help" + case "history-list": + return "lark-cli docs +history-list --help" + case "history-revert": + return "lark-cli docs +history-revert --help" + case "history-revert-status": + return "lark-cli docs +history-revert-status --help" default: return "lark-cli docs --help" } @@ -56,6 +64,9 @@ func Shortcuts() []common.Shortcut { DocsCreate, DocsFetch, DocsUpdate, + DocsHistoryList, + DocsHistoryRevert, + DocsHistoryRevertStatus, DocMediaInsert, DocMediaUpload, DocMediaPreview, diff --git a/shortcuts/drive/drive_import_common.go b/shortcuts/drive/drive_import_common.go index daea5e050..71917a17a 100644 --- a/shortcuts/drive/drive_import_common.go +++ b/shortcuts/drive/drive_import_common.go @@ -8,6 +8,7 @@ import ( "encoding/json" "fmt" "path/filepath" + "strconv" "strings" "time" @@ -28,6 +29,8 @@ const ( driveImport500MBFileSizeLimit int64 = 500 * 1024 * 1024 driveImport600MBFileSizeLimit int64 = 600 * 1024 * 1024 driveImport800MBFileSizeLimit int64 = 800 * 1024 * 1024 + + driveImportConcurrentOperationHint = "This import conflict means another operation is running in the same Drive location. Run batch imports to the same folder/root or target bitable serially. Wait a few seconds before retrying each failed import; retry each failed item at most 3 times, then stop and report the conflict." ) // driveImportExtToDocTypes defines which source file extensions can be imported @@ -47,6 +50,8 @@ var driveImportExtToDocTypes = map[string][]string{ "pptx": {"slides"}, } +var driveImportConcurrentOperationCodes = []int{232140101, 232140100, 233523001} + // driveImportSpec contains the user-facing import inputs after normalization. type driveImportSpec struct { FilePath string @@ -427,11 +432,7 @@ func pollDriveImportTask(runtime *common.RuntimeContext, ticket string) (driveIm return status, true, nil } if status.Failed() { - msg := strings.TrimSpace(status.JobErrorMsg) - if msg == "" { - msg = status.StatusLabel() - } - return status, false, errs.NewAPIError(errs.SubtypeServerError, "import failed with status %d: %s", status.JobStatus, msg) + return status, false, driveImportFailureError(status) } } if !hadSuccessfulPoll && lastErr != nil { @@ -440,3 +441,40 @@ func pollDriveImportTask(runtime *common.RuntimeContext, ticket string) (driveIm return lastStatus, false, nil } + +func driveImportFailureError(status driveImportStatus) *errs.APIError { + msg := strings.TrimSpace(status.JobErrorMsg) + if msg == "" { + msg = status.StatusLabel() + } + + apiErr := errs.NewAPIError(errs.SubtypeServerError, "import failed with status %d: %s", status.JobStatus, msg) + if code, ok := driveImportConcurrentOperationCode(msg); ok { + apiErr = apiErr.WithCode(code).WithRetryable().WithHint(driveImportConcurrentOperationHint) + } + return apiErr +} + +func driveImportConcurrentOperationCode(msg string) (int, bool) { + for _, code := range driveImportConcurrentOperationCodes { + codeText := strconv.Itoa(code) + for idx := strings.Index(msg, codeText); idx >= 0; { + end := idx + len(codeText) + if (idx == 0 || !isASCIIDigit(msg[idx-1])) && (end == len(msg) || !isASCIIDigit(msg[end])) { + return code, true + } + + nextStart := idx + 1 + next := strings.Index(msg[nextStart:], codeText) + if next < 0 { + break + } + idx = nextStart + next + } + } + return 0, false +} + +func isASCIIDigit(ch byte) bool { + return ch >= '0' && ch <= '9' +} diff --git a/shortcuts/drive/drive_import_common_test.go b/shortcuts/drive/drive_import_common_test.go index a59e31feb..c44ab9b32 100644 --- a/shortcuts/drive/drive_import_common_test.go +++ b/shortcuts/drive/drive_import_common_test.go @@ -7,6 +7,7 @@ import ( "bytes" "errors" "os" + "strconv" "strings" "testing" @@ -211,6 +212,82 @@ func TestDriveImportStatusPendingWithoutToken(t *testing.T) { } } +func TestDriveImportFailureErrorAddsConcurrentOperationGuidance(t *testing.T) { + t.Parallel() + + for _, code := range driveImportConcurrentOperationCodes { + t.Run(strconv.Itoa(code), func(t *testing.T) { + t.Parallel() + + err := driveImportFailureError(driveImportStatus{ + JobStatus: 3, + JobErrorMsg: "call CreateObjNode return error code, code: " + strconv.Itoa(code) + ", message:", + }) + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got %T", err) + } + if problem.Category != errs.CategoryAPI { + t.Fatalf("category = %q, want %q", problem.Category, errs.CategoryAPI) + } + if problem.Subtype != errs.SubtypeServerError { + t.Fatalf("subtype = %q, want %q", problem.Subtype, errs.SubtypeServerError) + } + if problem.Code != code { + t.Fatalf("code = %d, want %d", problem.Code, code) + } + if !problem.Retryable { + t.Fatal("expected retryable error") + } + if problem.Hint != driveImportConcurrentOperationHint { + t.Fatalf("hint = %q, want %q", problem.Hint, driveImportConcurrentOperationHint) + } + }) + } +} + +func TestDriveImportFailureErrorLeavesOtherFailuresUnchanged(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + msg string + }{ + { + name: "ordinary failure", + msg: "unsupported conversion", + }, + { + name: "longer numeric code containing known code", + msg: "call CreateObjNode return error code, code: 12321401012, message:", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + err := driveImportFailureError(driveImportStatus{ + JobStatus: 3, + JobErrorMsg: tt.msg, + }) + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got %T", err) + } + if problem.Code != 0 { + t.Fatalf("code = %d, want 0", problem.Code) + } + if problem.Retryable { + t.Fatal("expected non-concurrency failure to remain non-retryable") + } + if problem.Hint != "" { + t.Fatalf("hint = %q, want empty", problem.Hint) + } + }) + } +} + func TestDriveImportTimeoutReturnsFollowUpCommand(t *testing.T) { f, stdout, _, reg := cmdutil.TestFactory(t, driveTestConfig()) reg.Register(&httpmock.Stub{ diff --git a/shortcuts/drive/drive_pull.go b/shortcuts/drive/drive_pull.go index bcdce7612..b49646f9b 100644 --- a/shortcuts/drive/drive_pull.go +++ b/shortcuts/drive/drive_pull.go @@ -184,6 +184,7 @@ var DrivePull = common.Shortcut{ var downloaded, skipped, failed, deletedLocal int downloadFailed := 0 + aborted := false items := make([]drivePullItem, 0) // Deterministic iteration order for output stability. @@ -194,7 +195,7 @@ var DrivePull = common.Shortcut{ sort.Strings(downloadablePaths) for _, rel := range downloadablePaths { - if drivePullHasTerminalFailure(items) { + if aborted { break } targetFile := remoteFiles[rel] @@ -232,6 +233,7 @@ var DrivePull = common.Shortcut{ failed++ downloadFailed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +pull after terminal %s failure: %v\n", item.Phase, err) break } @@ -298,7 +300,7 @@ var DrivePull = common.Shortcut{ "skipped": skipped, "failed": failed, "deleted_local": deletedLocal, - "aborted": drivePullHasTerminalFailure(items), + "aborted": aborted, }, "items": items, } @@ -347,15 +349,6 @@ func drivePullFailedItem(relPath, fileToken, sourceID, action, phase string, err return item, decision.Terminal } -func drivePullHasTerminalFailure(items []drivePullItem) bool { - for _, item := range items { - if driveTerminalBatchErrorClass(item.ErrorClass) { - return true - } - } - return false -} - // drivePullDownload streams one Drive file into the local mirror target and // then best-effort aligns the local mtime to Drive's modified_time. func drivePullDownload(ctx context.Context, runtime *common.RuntimeContext, fileToken, target, remoteModifiedTime string) error { diff --git a/shortcuts/drive/drive_push.go b/shortcuts/drive/drive_push.go index e0ff5c122..bc5adfc4c 100644 --- a/shortcuts/drive/drive_push.go +++ b/shortcuts/drive/drive_push.go @@ -35,6 +35,7 @@ type drivePushItem struct { Version string `json:"version,omitempty"` SizeBytes int64 `json:"size_bytes,omitempty"` Error string `json:"error,omitempty"` + Hint string `json:"hint,omitempty"` Phase string `json:"phase,omitempty"` ErrorClass string `json:"error_class,omitempty"` Code int `json:"code,omitempty"` @@ -48,6 +49,7 @@ type driveBatchFailureDecision struct { Subtype string Retryable bool Terminal bool + Hint string } // DrivePush is a one-way, file-level mirror from a local directory onto a @@ -240,6 +242,7 @@ var DrivePush = common.Shortcut{ // locally and now on Drive too), which is the worst-of-both-worlds // outcome the review flagged. uploadFailed := false + aborted := false // folderCache holds rel_path → folder_token. Seeded from the remote // listing (so we don't recreate folders that already exist) and @@ -266,6 +269,7 @@ var DrivePush = common.Shortcut{ failed++ uploadFailed = true if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +push after terminal %s failure: %v\n", item.Phase, ensureErr) break } @@ -284,7 +288,7 @@ var DrivePush = common.Shortcut{ for _, rel := range localPaths { localFile := localFiles[rel] - if uploadFailed && drivePushHasTerminalFailure(items) { + if uploadFailed && aborted { break } @@ -301,6 +305,7 @@ var DrivePush = common.Shortcut{ failed++ uploadFailed = true if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +push after terminal %s failure: %v\n", item.Phase, parentErr) break } @@ -332,6 +337,7 @@ var DrivePush = common.Shortcut{ failed++ uploadFailed = true if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +push after terminal %s failure: %v\n", item.Phase, upErr) break } @@ -350,6 +356,7 @@ var DrivePush = common.Shortcut{ failed++ uploadFailed = true if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +push after terminal %s failure: %v\n", item.Phase, ensureErr) break } @@ -362,6 +369,7 @@ var DrivePush = common.Shortcut{ failed++ uploadFailed = true if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +push after terminal %s failure: %v\n", item.Phase, upErr) break } @@ -407,10 +415,15 @@ var DrivePush = common.Shortcut{ continue } if err := drivePushDeleteFile(ctx, runtime, entry.FileToken); err != nil { + if drivePushIsAlreadyDeleted(err) { + items = append(items, drivePushItem{RelPath: rel, FileToken: entry.FileToken, Action: "already_deleted"}) + continue + } item, terminal := drivePushFailedItem(rel, entry.FileToken, "delete_failed", "delete", 0, err) items = append(items, item) failed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +push after terminal %s failure: %v\n", item.Phase, err) abortDelete = true break @@ -429,7 +442,7 @@ var DrivePush = common.Shortcut{ "skipped": skipped, "failed": failed, "deleted_remote": deletedRemote, - "aborted": drivePushHasTerminalFailure(items), + "aborted": aborted, }, "items": items, } @@ -567,6 +580,7 @@ func drivePushFailedItem(relPath, fileToken, action, phase string, sizeBytes int Action: action, SizeBytes: sizeBytes, Error: err.Error(), + Hint: decision.Hint, Phase: phase, ErrorClass: decision.Class, Code: decision.Code, @@ -613,6 +627,10 @@ func driveClassifyBatchFailure(err error) driveBatchFailureDecision { decision.Class = "file_size_limit" case problem.Code == 1062009: decision.Class = "upload_size_mismatch" + case problem.Code == 1061044: + decision.Class = "parent_node_missing" + decision.Terminal = true + decision.Hint = "The destination parent folder no longer exists or is not visible. Verify --folder-token, folder permissions, and whether a parent directory was deleted during push before retrying." case problem.Subtype == errs.SubtypeNotFound || problem.Code == 1061007: decision.Class = "remote_not_found" case problem.Subtype == errs.SubtypeServerError || problem.Code == 1061001 || problem.Code == 2200: @@ -626,22 +644,9 @@ func driveClassifyBatchFailure(err error) driveBatchFailureDecision { return decision } -func drivePushHasTerminalFailure(items []drivePushItem) bool { - for _, item := range items { - if driveTerminalBatchErrorClass(item.ErrorClass) { - return true - } - } - return false -} - -func driveTerminalBatchErrorClass(errorClass string) bool { - switch errorClass { - case "app_scope_missing", "user_scope_missing", "permission_denied", "invalid_api_parameters", "rate_limited", "server_error": - return true - default: - return false - } +func drivePushIsAlreadyDeleted(err error) bool { + problem, ok := errs.ProblemOf(err) + return ok && problem.Code == 1061007 } func drivePushRemoteViews(entries []driveRemoteEntry, duplicateRemote string) (map[string]driveRemoteEntry, map[string]driveRemoteEntry, map[string][]driveRemoteEntry, error) { diff --git a/shortcuts/drive/drive_push_test.go b/shortcuts/drive/drive_push_test.go index dfdd60738..7bad05d0f 100644 --- a/shortcuts/drive/drive_push_test.go +++ b/shortcuts/drive/drive_push_test.go @@ -732,6 +732,65 @@ func TestDrivePushDeleteRemoteAbortsAfterTerminalFailure(t *testing.T) { } } +func TestDrivePushDeleteRemoteTreatsAlreadyDeletedAsNoop(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, driveTestConfig()) + + tmpDir := t.TempDir() + withDriveWorkingDir(t, tmpDir) + if err := os.MkdirAll("local", 0o755); err != nil { + t.Fatalf("MkdirAll: %v", err) + } + + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "folder_token=folder_root", + Body: map[string]interface{}{ + "code": 0, "msg": "ok", + "data": map[string]interface{}{ + "files": []interface{}{ + map[string]interface{}{"token": "tok_orphan", "name": "orphan.txt", "type": "file"}, + }, + "has_more": false, + }, + }, + }) + reg.Register(&httpmock.Stub{ + Method: "DELETE", + URL: "/open-apis/drive/v1/files/tok_orphan", + Body: map[string]interface{}{ + "code": 1061007, + "msg": "file has been delete.", + }, + }) + + err := mountAndRunDrive(t, DrivePush, []string{ + "+push", + "--local-dir", "local", + "--folder-token", "folder_root", + "--delete-remote", + "--yes", + "--as", "bot", + }, f, stdout) + if err != nil { + t.Fatalf("already-deleted remote should be an idempotent success, got: %v\nstdout: %s", err, stdout.String()) + } + + summary, items := splitDrivePushStdout(t, stdout.Bytes()) + if got := summary["failed"]; got != float64(0) { + t.Fatalf("summary.failed = %v, want 0", got) + } + if got := summary["deleted_remote"]; got != float64(0) { + t.Fatalf("summary.deleted_remote = %v, want 0 because CLI did not delete it in this run", got) + } + if len(items) != 1 { + t.Fatalf("items len = %d, want 1; items=%#v", len(items), items) + } + item := items[0] + if item["action"] != "already_deleted" || item["file_token"] != "tok_orphan" { + t.Fatalf("unexpected already-deleted item: %#v", item) + } +} + func TestDrivePushNewestOverwritesChosenDuplicateAndDeletesSibling(t *testing.T) { f, stdout, _, reg := cmdutil.TestFactory(t, driveTestConfig()) @@ -1137,6 +1196,78 @@ func TestDrivePushAbortsAfterUploadParamsError(t *testing.T) { } } +func TestDrivePushAbortsAfterUploadParentNodeMissing(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, driveTestConfig()) + + tmpDir := t.TempDir() + withDriveWorkingDir(t, tmpDir) + if err := os.MkdirAll("local", 0o755); err != nil { + t.Fatalf("MkdirAll: %v", err) + } + if err := os.WriteFile(filepath.Join("local", "a.txt"), []byte("A"), 0o644); err != nil { + t.Fatalf("WriteFile a: %v", err) + } + if err := os.WriteFile(filepath.Join("local", "b.txt"), []byte("B"), 0o644); err != nil { + t.Fatalf("WriteFile b: %v", err) + } + + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "folder_token=folder_root", + Body: map[string]interface{}{ + "code": 0, "msg": "ok", + "data": map[string]interface{}{"files": []interface{}{}, "has_more": false}, + }, + }) + reg.Register(&httpmock.Stub{ + Method: "POST", + URL: "/open-apis/drive/v1/files/upload_all", + Body: map[string]interface{}{ + "code": 1061044, + "msg": "parent node not exist.", + }, + }) + + err := mountAndRunDrive(t, DrivePush, []string{ + "+push", + "--local-dir", "local", + "--folder-token", "folder_root", + "--as", "bot", + }, f, stdout) + if err == nil { + t.Fatalf("expected partial failure, got nil\nstdout: %s", stdout.String()) + } + var pfErr *output.PartialFailureError + if !errors.As(err, &pfErr) { + t.Fatalf("expected *output.PartialFailureError, got %T: %v", err, err) + } + summary, items := splitDrivePushStdout(t, stdout.Bytes()) + if got := summary["failed"]; got != float64(1) { + t.Fatalf("summary.failed = %v, want 1", got) + } + if got := summary["aborted"]; got != true { + t.Fatalf("summary.aborted = %v, want true", got) + } + if len(items) != 1 { + t.Fatalf("items len = %d, want 1; items=%#v", len(items), items) + } + item := items[0] + if item["rel_path"] != "a.txt" || item["phase"] != "upload" || item["error_class"] != "parent_node_missing" { + t.Fatalf("unexpected failed item: %#v", item) + } + if item["code"] != float64(1061044) || item["subtype"] != "not_found" || item["retryable"] != false { + t.Fatalf("unexpected failure metadata: %#v", item) + } + if got, _ := item["hint"].(string); !strings.Contains(got, "--folder-token") || !strings.Contains(got, "parent") { + t.Fatalf("hint should point at the destination parent folder, got item=%#v", item) + } + for _, item := range items { + if item["rel_path"] == "b.txt" { + t.Fatalf("parent-node missing must abort before b.txt, got items=%#v", items) + } + } +} + func TestDrivePushAbortsAfterCreateFolderMissingScope(t *testing.T) { f, stdout, _, reg := cmdutil.TestFactory(t, driveTestConfig()) diff --git a/shortcuts/drive/drive_search.go b/shortcuts/drive/drive_search.go index ca4ece03f..dd513f6d9 100644 --- a/shortcuts/drive/drive_search.go +++ b/shortcuts/drive/drive_search.go @@ -75,7 +75,7 @@ var DriveSearch = common.Shortcut{ AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ - {Name: "query", Desc: "search keyword (may be empty to browse by filter only)"}, + {Name: "query", Desc: "search keyword (may be empty to browse by filter only); max 30 characters by Unicode code point (CJK counts 1 each), over 30 the server rejects with 99992402 field validation failed"}, {Name: "mine", Type: "bool", Desc: "restrict to docs I own (server-side owner semantic, NOT original creator; uses current user's open_id)"}, {Name: "creator-ids", Desc: "comma-separated owner open_ids (API field is creator_ids but matched by owner); mutually exclusive with --mine"}, diff --git a/shortcuts/drive/drive_sync.go b/shortcuts/drive/drive_sync.go index 75658e351..d4d705747 100644 --- a/shortcuts/drive/drive_sync.go +++ b/shortcuts/drive/drive_sync.go @@ -268,6 +268,7 @@ var DriveSync = common.Shortcut{ // --- Phase 2: Execute sync operations --- var pulled, pushed, skipped, failed int + aborted := false items := make([]driveSyncItem, 0) // Build push infrastructure: local walk for push + remote views + folder cache. @@ -286,16 +287,21 @@ var DriveSync = common.Shortcut{ // Mirror local directory structure first (same as +push), so // empty local directories are not silently dropped. for _, relDir := range localDirs { - if driveSyncHasTerminalFailure(items) { + if aborted { break } if _, alreadyRemote := folderCache[relDir]; alreadyRemote { continue } if _, ensureErr := drivePushEnsureFolder(ctx, runtime, folderToken, relDir, folderCache); ensureErr != nil { - item, _ := driveSyncFailedItem(relDir, "", "failed", "push", "create_folder", ensureErr) + item, terminal := driveSyncFailedItem(relDir, "", "failed", "push", "create_folder", ensureErr) items = append(items, item) failed++ + if terminal { + aborted = true + fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, ensureErr) + break + } continue } items = append(items, driveSyncItem{RelPath: relDir, FileToken: folderCache[relDir], Action: "folder_created", Direction: "push"}) @@ -304,7 +310,7 @@ var DriveSync = common.Shortcut{ // 2a. Pull new_remote files. for _, entry := range newRemote { - if driveSyncHasTerminalFailure(items) { + if aborted { break } targetFile, ok := pullRemoteFiles[entry.RelPath] @@ -318,6 +324,7 @@ var DriveSync = common.Shortcut{ items = append(items, item) failed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, err) break } @@ -329,7 +336,7 @@ var DriveSync = common.Shortcut{ // 2b. Push new_local files. for _, entry := range newLocal { - if driveSyncHasTerminalFailure(items) { + if aborted { break } localFile, ok := pushLocalFiles[entry.RelPath] @@ -341,9 +348,14 @@ var DriveSync = common.Shortcut{ parentRel := drivePushParentRel(entry.RelPath) parentToken, ensureErr := drivePushEnsureFolder(ctx, runtime, folderToken, parentRel, folderCache) if ensureErr != nil { - item, _ := driveSyncFailedItem(entry.RelPath, "", "failed", "push", "create_folder", ensureErr) + item, terminal := driveSyncFailedItem(entry.RelPath, "", "failed", "push", "create_folder", ensureErr) items = append(items, item) failed++ + if terminal { + aborted = true + fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, ensureErr) + break + } continue } token, _, upErr := drivePushUploadFile(ctx, runtime, localFile, "", parentToken) @@ -352,6 +364,7 @@ var DriveSync = common.Shortcut{ items = append(items, item) failed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, upErr) break } @@ -363,7 +376,7 @@ var DriveSync = common.Shortcut{ // 2c. Resolve modified files by --on-conflict strategy. for _, entry := range modified { - if driveSyncHasTerminalFailure(items) { + if aborted { break } remoteFile := remoteFiles[entry.RelPath] @@ -397,6 +410,7 @@ var DriveSync = common.Shortcut{ items = append(items, item) failed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, err) break } @@ -415,9 +429,14 @@ var DriveSync = common.Shortcut{ } parentToken, parentErr := drivePushEnsureFolder(ctx, runtime, folderToken, drivePushParentRel(entry.RelPath), folderCache) if parentErr != nil { - item, _ := driveSyncFailedItem(entry.RelPath, existingToken, "failed", "push", "create_folder", parentErr) + item, terminal := driveSyncFailedItem(entry.RelPath, existingToken, "failed", "push", "create_folder", parentErr) items = append(items, item) failed++ + if terminal { + aborted = true + fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, parentErr) + break + } continue } token, _, upErr := drivePushUploadFile(ctx, runtime, localFile, existingToken, parentToken) @@ -435,6 +454,7 @@ var DriveSync = common.Shortcut{ items = append(items, item) failed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, upErr) break } @@ -503,6 +523,7 @@ var DriveSync = common.Shortcut{ items = append(items, item) failed++ if terminal { + aborted = true fmt.Fprintf(runtime.IO().ErrOut, "Aborting +sync after terminal %s failure: %v\n", item.Phase, downloadErr) break } @@ -531,7 +552,7 @@ var DriveSync = common.Shortcut{ "pushed": pushed, "skipped": skipped, "failed": failed, - "aborted": driveSyncHasTerminalFailure(items), + "aborted": aborted, }, "items": items, } @@ -577,15 +598,6 @@ func driveSyncFailedItem(relPath, fileToken, action, direction, phase string, er return item, decision.Terminal } -func driveSyncHasTerminalFailure(items []driveSyncItem) bool { - for _, item := range items { - if driveTerminalBatchErrorClass(item.ErrorClass) { - return true - } - } - return false -} - // driveSyncAskConflict prompts the user for a conflict resolution strategy // for a single file. Returns the strategy string, or empty string if the // user chose to skip. diff --git a/shortcuts/im/helpers_test.go b/shortcuts/im/helpers_test.go index b177fd878..a715d56ba 100644 --- a/shortcuts/im/helpers_test.go +++ b/shortcuts/im/helpers_test.go @@ -651,6 +651,7 @@ func TestShortcuts(t *testing.T) { want := []string{ "+chat-create", "+chat-list", + "+chat-members-list", "+chat-messages-list", "+chat-search", "+chat-update", diff --git a/shortcuts/im/im_chat_members_list.go b/shortcuts/im/im_chat_members_list.go new file mode 100644 index 000000000..d467af63c --- /dev/null +++ b/shortcuts/im/im_chat_members_list.go @@ -0,0 +1,420 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package im + +import ( + "context" + "encoding/json" + "fmt" + "io" + "strings" + "time" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/output" + "github.com/larksuite/cli/internal/validate" + "github.com/larksuite/cli/shortcuts/common" +) + +const ( + imChatMembersListPathFmt = "/open-apis/im/v1/chats/%s/members/list" + chatMembersListDefaultPageSize = 20 + chatMembersListMaxPageSize = 100 + // chatMembersListDefaultPageDelay throttles --page-all the same way the + // generic paginateLoop does (200ms). It matters for tenants WITHOUT the + // server-side member cap, where a large group drains many pages back to + // back and could otherwise trip rate limits. + chatMembersListDefaultPageDelay = 200 +) + +// ImChatMembersList is the +chat-members-list shortcut: it lists chat members, +// returning users and bots in separate buckets (users[]/bots[]). It owns its +// pagination loop (mirroring the generic paginateLoop conventions: a per-page +// log line, a --page-limit cap, a non-advancing-token guard) precisely because +// the response is multi-bucket — the generic --page-all merger is built for +// single-array responses and would drop the bots[] bucket and the final-page +// truncations[] signal. See mergeChatMemberPages for the merge semantics. +var ImChatMembersList = common.Shortcut{ + Service: "im", + Command: "+chat-members-list", + Description: "List members of a chat; returns separate users[] / bots[] buckets; callable as user or bot; --member-types filters which kinds to return; --page-all pagination; surfaces truncations[] when the server caps a bucket", + Risk: "read", + // Declare the narrowest scope the API accepts so tokens carrying only + // im:chat.members:read are honored (same rationale as +chat-list). + Scopes: []string{"im:chat.members:read"}, + AuthTypes: []string{"user", "bot"}, + Flags: []common.Flag{ + {Name: "chat-id", Required: true, Desc: "chat ID (oc_xxx)"}, + {Name: "member-types", Type: "string_slice", Desc: "member types to return (user, bot); omit = all"}, + {Name: "member-id-type", Default: "open_id", Desc: "ID type for member_id in response", Enum: []string{"open_id", "union_id", "user_id"}}, + {Name: "page-size", Type: "int", Default: fmt.Sprintf("%d", chatMembersListDefaultPageSize), Desc: fmt.Sprintf("page size, 1-%d", chatMembersListMaxPageSize)}, + {Name: "page-token", Desc: "page token; implies single-page fetch (no auto-pagination)"}, + {Name: "page-all", Type: "bool", Desc: "automatically paginate through all pages (capped by --page-limit)"}, + {Name: "page-limit", Type: "int", Default: "10", Desc: "max pages to fetch with --page-all (default 10, 0 = unlimited)"}, + {Name: "page-delay", Type: "int", Default: fmt.Sprintf("%d", chatMembersListDefaultPageDelay), Desc: "delay in ms between pages when --page-all (0 = no delay)"}, + }, + Tips: []string{ + "Default fetches a single page; pass --page-all to walk every page.", + "With --page-all and no explicit --page-size, the max page size is used to minimize round-trips.", + "truncations[] in the result means the server capped a bucket due to security config — the member list is incomplete.", + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + chatID := strings.TrimSpace(runtime.Str("chat-id")) + if chatID == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--chat-id is required (oc_xxx)").WithParam("--chat-id") + } + if !strings.HasPrefix(chatID, "oc_") { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "invalid --chat-id %q: must be an open_chat_id starting with oc_", chatID).WithParam("--chat-id") + } + if n := runtime.Int("page-size"); n < 1 || n > chatMembersListMaxPageSize { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--page-size must be an integer between 1 and %d", chatMembersListMaxPageSize).WithParam("--page-size") + } + if n := runtime.Int("page-limit"); n < 0 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--page-limit must be a non-negative integer").WithParam("--page-limit") + } + if n := runtime.Int("page-delay"); n < 0 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--page-delay must be a non-negative integer").WithParam("--page-delay") + } + _, err := normalizeMemberTypes(runtime.StrSlice("member-types")) + return err + }, + DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + chatID := strings.TrimSpace(runtime.Str("chat-id")) + dry := common.NewDryRunAPI() + if chatMembersShouldAutoPaginate(runtime) { + dry.Desc("Auto-paginates through all pages (capped by --page-limit when > 0)") + } + params, _ := buildChatMembersParams(runtime, strings.TrimSpace(runtime.Str("page-token"))) + return dry. + GET(fmt.Sprintf(imChatMembersListPathFmt, validate.EncodePathSegment(chatID))). + Params(params) + }, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + warnIfConflictingPagingFlags(runtime) + + chatID := strings.TrimSpace(runtime.Str("chat-id")) + res, err := fetchChatMembers(ctx, runtime, chatID) + if err != nil { + return err + } + + // The truncation signal is the whole reason this is a dedicated shortcut: + // surface it loudly so an agent never mistakes a capped list for a + // complete one. + if len(res.truncations) > 0 { + writeChatMembersTruncationWarning(runtime.IO().ErrOut, res.truncations) + } + fmt.Fprintf(runtime.IO().ErrOut, "Found %d user(s) and %d bot(s)\n", len(res.users), len(res.bots)) + + outData := map[string]interface{}{ + "chat_id": chatID, + "users": res.users, + "bots": res.bots, + "truncations": res.truncations, + "has_more": res.hasMore, + "page_token": res.pageToken, + } + if res.userTotal != nil { + outData["user_total"] = res.userTotal + } + if res.botTotal != nil { + outData["bot_total"] = res.botTotal + } + + runtime.OutFormat(outData, &output.Meta{Count: len(res.users) + len(res.bots)}, func(w io.Writer) { + renderChatMembersPretty(w, chatID, res) + }) + return nil + }, +} + +// chatMembersResult is the aggregated view across one or more pages. +type chatMembersResult struct { + users []interface{} + bots []interface{} + truncations []interface{} + userTotal interface{} + botTotal interface{} + hasMore bool + pageToken string +} + +// effectiveChatMembersPageSize resolves the page_size to request. When draining +// every page (--page-all) and the caller did NOT explicitly set --page-size, it +// uses the maximum so a full walk takes the fewest round-trips. An explicit +// --page-size is always honored; without --page-all the smaller default is kept +// as a sensible single-page preview size. +func effectiveChatMembersPageSize(runtime *common.RuntimeContext) int { + if chatMembersShouldAutoPaginate(runtime) && !runtime.Changed("page-size") { + return chatMembersListMaxPageSize + } + if n := runtime.Int("page-size"); n > 0 { + return n + } + return chatMembersListDefaultPageSize +} + +// chatMembersShouldAutoPaginate reports whether the fetch loop should walk +// every page. An explicit --page-token disables the auto loop because the +// caller supplied a specific cursor (single-page fetch). +func chatMembersShouldAutoPaginate(runtime *common.RuntimeContext) bool { + if strings.TrimSpace(runtime.Str("page-token")) != "" { + return false + } + return runtime.Bool("page-all") +} + +// buildChatMembersParams builds the query params for one page request. The +// startToken (when non-empty) seeds the page_token; the loop overrides it per +// page. Returns the params and the normalized member-types CSV (already +// validated by Validate, so the error is only a defensive guard). +func buildChatMembersParams(runtime *common.RuntimeContext, startToken string) (map[string]interface{}, error) { + memberTypes, err := normalizeMemberTypes(runtime.StrSlice("member-types")) + if err != nil { + return nil, err + } + params := map[string]interface{}{ + "member_id_type": runtime.Str("member-id-type"), + "page_size": effectiveChatMembersPageSize(runtime), + } + if memberTypes != "" { + params["member_types"] = memberTypes + } + if startToken != "" { + params["page_token"] = startToken + } + return params, nil +} + +// fetchChatMembers walks the list_members endpoint, honoring the four +// pagination flags the same way the generic --page-all path does. It merges +// each page into the aggregate as it arrives (rather than buffering every raw +// page), so peak memory is just the aggregated members plus the single most +// recent page — important for large groups under --page-limit 0. +func fetchChatMembers(ctx context.Context, runtime *common.RuntimeContext, chatID string) (*chatMembersResult, error) { + auto := chatMembersShouldAutoPaginate(runtime) + pageLimit := runtime.Int("page-limit") + pageDelay := runtime.Int("page-delay") + apiPath := fmt.Sprintf(imChatMembersListPathFmt, validate.EncodePathSegment(chatID)) + + params, err := buildChatMembersParams(runtime, strings.TrimSpace(runtime.Str("page-token"))) + if err != nil { + return nil, err + } + + res := newChatMembersResult() + var lastData map[string]interface{} + pageToken := strings.TrimSpace(runtime.Str("page-token")) + for page := 0; ; page++ { + if pageToken != "" { + params["page_token"] = pageToken + } + fmt.Fprintf(runtime.IO().ErrOut, "[page %d] fetching...\n", page+1) + data, err := runtime.CallAPITyped("GET", apiPath, params, nil) + if err != nil { + return nil, err + } + addMemberBuckets(res, data) + lastData = data + + hasMore, nextToken := common.PaginationMeta(data) + if !auto { + break + } + if !hasMore || nextToken == "" { + break + } + if nextToken == pageToken { + // Guard against a buggy server echoing the same cursor with + // has_more=true: without --page-limit we would loop forever. + fmt.Fprintln(runtime.IO().ErrOut, "Stopping pagination: server returned a non-advancing page_token.") + break + } + if pageLimit > 0 && page+1 >= pageLimit { + fmt.Fprintf(runtime.IO().ErrOut, "[pagination] reached page limit (%d), stopping. Use --page-all --page-limit 0 to fetch all pages.\n", pageLimit) + break + } + pageToken = nextToken + // Throttle between pages (only reached when another page follows), so + // draining a large untruncated list doesn't hammer the API. + if pageDelay > 0 { + time.Sleep(time.Duration(pageDelay) * time.Millisecond) + } + } + if lastData != nil { + applyLastPageSignals(res, lastData) + } + return res, nil +} + +// newChatMembersResult returns an empty aggregate with non-nil buckets so the +// JSON output always carries arrays (never null). +func newChatMembersResult() *chatMembersResult { + return &chatMembersResult{ + users: []interface{}{}, + bots: []interface{}{}, + truncations: []interface{}{}, + } +} + +// addMemberBuckets appends one page's users[] and bots[] into the aggregate. +// Concatenating every bucket is what avoids dropping bots[] — the bug the +// generic single-array --page-all merger would hit on this multi-bucket shape. +func addMemberBuckets(res *chatMembersResult, data map[string]interface{}) { + if u, ok := data["users"].([]interface{}); ok { + res.users = append(res.users, u...) + } + if b, ok := data["bots"].([]interface{}); ok { + res.bots = append(res.bots, b...) + } +} + +// applyLastPageSignals copies the per-request signals from the FINAL page: +// has_more / page_token / truncations / totals. These must come from the last +// page, not page 1: truncations[] is emitted only on the final page (empty +// earlier), so reading it sooner would hide a server-side cap; user_total / +// bot_total are server-wide counts, and taking the final page's value keeps a +// single, consistent source rather than a possibly-stale earlier count. +func applyLastPageSignals(res *chatMembersResult, data map[string]interface{}) { + res.hasMore, res.pageToken = common.PaginationMeta(data) + if t, ok := data["truncations"].([]interface{}); ok { + res.truncations = t + } + res.userTotal = data["user_total"] + res.botTotal = data["bot_total"] +} + +// mergeChatMemberPages folds a slice of page payloads into one aggregate. It is +// the same logic fetchChatMembers applies incrementally, kept as a pure +// function so the multi-bucket merge + last-page-signal semantics are unit +// tested in one place. +func mergeChatMemberPages(pages []map[string]interface{}) *chatMembersResult { + res := newChatMembersResult() + if len(pages) == 0 { + return res + } + for _, data := range pages { + addMemberBuckets(res, data) + } + applyLastPageSignals(res, pages[len(pages)-1]) + return res +} + +// normalizeMemberTypes validates the --member-types slice (already CSV-split by +// cobra) into a lowercased, deduped CSV string. Empty input is a no-op (return +// the API's default of all types). Any element outside {user, bot} is rejected. +func normalizeMemberTypes(raw []string) (string, error) { + if len(raw) == 0 { + return "", nil + } + seen := make(map[string]struct{}, len(raw)) + out := make([]string, 0, len(raw)) + for _, p := range raw { + p = strings.TrimSpace(strings.ToLower(p)) + if p != "user" && p != "bot" { + return "", errs.NewValidationError(errs.SubtypeInvalidArgument, "invalid --member-types value %q: expected one of user, bot", p).WithParam("--member-types") + } + if _, dup := seen[p]; dup { + continue + } + seen[p] = struct{}{} + out = append(out, p) + } + return strings.Join(out, ","), nil +} + +// warnIfConflictingPagingFlags mirrors the wiki list shortcuts: --page-token +// wins (single-page fetch from the supplied cursor) and --page-all is ignored. +func warnIfConflictingPagingFlags(runtime *common.RuntimeContext) { + if strings.TrimSpace(runtime.Str("page-token")) != "" && runtime.Bool("page-all") { + fmt.Fprintln(runtime.IO().ErrOut, + "warning: --page-token is set, so --page-all is ignored (single-page fetch from the supplied cursor)") + } +} + +// writeChatMembersTruncationWarning emits a stderr warning for every +// server-side bucket cap reported in truncations[]. It uses the repo's plain +// "warning: : " convention (see shortcuts/common/runner.go and +// +chat-list's bot_strip_p2p) — no emoji, so it stays legible in CI logs and +// pipes regardless of terminal encoding. +func writeChatMembersTruncationWarning(w io.Writer, truncations []interface{}) { + for _, t := range truncations { + tm, ok := t.(map[string]interface{}) + if !ok { + continue + } + memberType := valueOrAll(tm["member_type"]) + limit := tm["limit"] + fmt.Fprintf(w, "warning: members_truncated: %s bucket capped at %v by server security config; the member list is INCOMPLETE\n", memberType, limit) + } +} + +func valueOrAll(v interface{}) string { + if s, ok := v.(string); ok && s != "" { + return s + } + return "member" +} + +func renderChatMembersPretty(w io.Writer, chatID string, res *chatMembersResult) { + fmt.Fprintf(w, "Chat: %s\n", chatID) + // Show the server-wide total next to the fetched count: when truncated or + // paged, total can far exceed len(users)/len(bots), and that gap is exactly + // what tells the reader how incomplete the list is. + fmt.Fprintf(w, "Users (%d%s):\n", len(res.users), totalSuffix(res.userTotal, len(res.users))) + for i, u := range res.users { + m, _ := u.(map[string]interface{}) + fmt.Fprintf(w, " [%d] %s %s\n", i+1, valueOrDash(m["member_id"]), valueOrDash(m["name"])) + } + fmt.Fprintf(w, "Bots (%d%s):\n", len(res.bots), totalSuffix(res.botTotal, len(res.bots))) + for i, b := range res.bots { + m, _ := b.(map[string]interface{}) + fmt.Fprintf(w, " [%d] %s %s\n", i+1, valueOrDash(m["member_id"]), valueOrDash(m["name"])) + } + if len(res.truncations) > 0 { + fmt.Fprintln(w, "warning: result truncated by server security config (see truncations[]); the list is INCOMPLETE") + } + if res.hasMore { + fmt.Fprint(w, "More pages available; pass --page-all (and --page-limit 0 for everything)") + if res.pageToken != "" { + fmt.Fprintf(w, ", or --page-token %s to resume", res.pageToken) + } + fmt.Fprintln(w) + } +} + +func valueOrDash(v interface{}) string { + if s, ok := v.(string); ok && s != "" { + return s + } + return "-" +} + +// totalSuffix renders " of " when the server-reported total exceeds the +// number actually fetched (so a truncated/partial bucket is obvious), and "" +// when the total is absent or already matches the fetched count. +func totalSuffix(total interface{}, fetched int) string { + n, ok := toInt(total) + if !ok || n <= fetched { + return "" + } + return fmt.Sprintf(" of %d", n) +} + +// toInt coerces a JSON-decoded number (float64 / json.Number / int) to int. +func toInt(v interface{}) (int, bool) { + switch n := v.(type) { + case float64: + return int(n), true + case int: + return n, true + case int64: + return int(n), true + case json.Number: + if i, err := n.Int64(); err == nil { + return int(i), true + } + } + return 0, false +} diff --git a/shortcuts/im/im_chat_members_list_test.go b/shortcuts/im/im_chat_members_list_test.go new file mode 100644 index 000000000..f0da03009 --- /dev/null +++ b/shortcuts/im/im_chat_members_list_test.go @@ -0,0 +1,325 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package im + +import ( + "bytes" + "context" + "errors" + "fmt" + "net/http" + "strconv" + "strings" + "testing" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/shortcuts/common" + "github.com/spf13/cobra" +) + +// page builds one list_members page payload shaped like the data object the +// server returns (users[]/bots[]/truncations[] plus paging + totals). +func cmlPage(users, bots, truncations []interface{}, hasMore bool, pageToken string) map[string]interface{} { + return map[string]interface{}{ + "users": users, + "bots": bots, + "truncations": truncations, + "has_more": hasMore, + "page_token": pageToken, + "user_total": 324, + "bot_total": 2, + } +} + +func us(ids ...string) []interface{} { + out := make([]interface{}, 0, len(ids)) + for _, id := range ids { + out = append(out, map[string]interface{}{"member_id": id}) + } + return out +} + +// TestMergeChatMemberPages_MergesUsersAndBots covers Bug 1: every list bucket +// (users AND bots) must be concatenated across pages, not just one of them. +func TestMergeChatMemberPages_MergesUsersAndBots(t *testing.T) { + pages := []map[string]interface{}{ + cmlPage(us("u1", "u2"), us("b1"), []interface{}{}, true, "p2"), + cmlPage(us("u3"), us("b2", "b3"), []interface{}{}, false, ""), + } + + res := mergeChatMemberPages(pages) + + if len(res.users) != 3 { + t.Errorf("users: want 3 merged, got %d", len(res.users)) + } + if len(res.bots) != 3 { + t.Errorf("bots: want 3 merged, got %d", len(res.bots)) + } +} + +// TestMergeChatMemberPages_TruncationsFromLastPage covers Bug 2: truncations[] +// is emitted only on the final page, so the merged view must take it from the +// last page rather than inherit page 1's empty slice. +func TestMergeChatMemberPages_TruncationsFromLastPage(t *testing.T) { + limit := []interface{}{map[string]interface{}{"limit": 100, "member_type": "user"}} + pages := []map[string]interface{}{ + cmlPage(us("u1"), us("b1"), []interface{}{}, true, "p2"), + cmlPage(us("u2"), nil, limit, false, ""), + } + + res := mergeChatMemberPages(pages) + + if len(res.truncations) != 1 { + t.Fatalf("truncations: want last page's 1 entry, got %d (%v)", len(res.truncations), res.truncations) + } +} + +// TestMergeChatMemberPages_HasMoreAndTokenFromLastPage guards that paging +// signals come from the final page (so a --page-limit cutoff is visible). +func TestMergeChatMemberPages_HasMoreAndTokenFromLastPage(t *testing.T) { + pages := []map[string]interface{}{ + cmlPage(us("u1"), nil, nil, true, "p2"), + cmlPage(us("u2"), nil, nil, true, "p3"), // loop stopped early; server still has more + } + + res := mergeChatMemberPages(pages) + + if !res.hasMore { + t.Error("has_more: want true from last page") + } + if res.pageToken != "p3" { + t.Errorf("page_token: want last page's p3, got %q", res.pageToken) + } +} + +// TestMergeChatMemberPages_TotalsFromLastPage verifies user_total / bot_total +// are taken from the final page (not an earlier, possibly-different value). +func TestMergeChatMemberPages_TotalsFromLastPage(t *testing.T) { + pages := []map[string]interface{}{ + {"users": us("u1"), "user_total": 999, "bot_total": 7, "has_more": true, "page_token": "p2"}, + {"users": us("u2"), "user_total": 324, "bot_total": 2, "has_more": false, "page_token": ""}, + } + res := mergeChatMemberPages(pages) + if n, _ := toInt(res.userTotal); n != 324 { + t.Errorf("user_total: want last page's 324, got %v", res.userTotal) + } + if n, _ := toInt(res.botTotal); n != 2 { + t.Errorf("bot_total: want last page's 2, got %v", res.botTotal) + } +} + +// TestChatMembersValidate covers --chat-id presence + oc_ prefix enforcement. +func TestChatMembersValidate(t *testing.T) { + noop := shortcutRoundTripFunc(func(req *http.Request) (*http.Response, error) { + return shortcutJSONResponse(200, map[string]interface{}{"code": 0, "data": cmlPage(nil, nil, nil, false, "")}), nil + }) + cases := []struct { + name string + chatID string + wantErr bool + }{ + {"valid oc_", "oc_abc", false}, + {"empty", "", true}, + {"missing oc_ prefix", "abc123", true}, + } + for _, c := range cases { + rt := newChatMembersTestRuntime(t, noop, map[string]string{"chat-id": c.chatID}, nil, nil) + err := ImChatMembersList.Validate(context.Background(), rt) + if c.wantErr { + assertValidationError(t, c.name, err, "--chat-id") + continue + } + if err != nil { + t.Errorf("%s: unexpected error %v", c.name, err) + } + } +} + +// assertValidationError checks err satisfies the repo's typed-error contract for +// a validation failure: a *errs.ValidationError carrying the expected Param, and +// problem metadata of category validation / subtype invalid_argument. +func assertValidationError(t *testing.T, ctx string, err error, wantParam string) { + t.Helper() + var ve *errs.ValidationError + if !errors.As(err, &ve) { + t.Errorf("%s: want *errs.ValidationError, got %T (%v)", ctx, err, err) + return + } + if ve.Param != wantParam { + t.Errorf("%s: Param = %q, want %q", ctx, ve.Param, wantParam) + } + p, ok := errs.ProblemOf(err) + if !ok || p.Category != errs.CategoryValidation || p.Subtype != errs.SubtypeInvalidArgument { + t.Errorf("%s: problem = %+v (ok=%v), want category=%s subtype=%s", ctx, p, ok, errs.CategoryValidation, errs.SubtypeInvalidArgument) + } +} + +func TestNormalizeMemberTypes(t *testing.T) { + cases := []struct { + in []string + want string + wantErr bool + }{ + {nil, "", false}, + {[]string{"user", "bot"}, "user,bot", false}, + {[]string{"USER", "user"}, "user", false}, // lowercased + deduped + {[]string{"admin"}, "", true}, + {[]string{""}, "", true}, + } + for _, c := range cases { + got, err := normalizeMemberTypes(c.in) + if c.wantErr { + assertValidationError(t, fmt.Sprintf("normalizeMemberTypes(%v)", c.in), err, "--member-types") + continue + } + if err != nil { + t.Errorf("normalizeMemberTypes(%v): unexpected error %v", c.in, err) + } + if got != c.want { + t.Errorf("normalizeMemberTypes(%v) = %q, want %q", c.in, got, c.want) + } + } +} + +// TestEffectiveChatMembersPageSize covers the --page-all max-page-size behavior: +// drain with no explicit size → max; explicit size → honored; single page → default. +func TestEffectiveChatMembersPageSize(t *testing.T) { + noop := shortcutRoundTripFunc(func(req *http.Request) (*http.Response, error) { + return shortcutJSONResponse(200, map[string]interface{}{"code": 0, "data": cmlPage(nil, nil, nil, false, "")}), nil + }) + cases := []struct { + name string + b map[string]bool + ints map[string]int + want int + }{ + {"page-all, size unset -> max", map[string]bool{"page-all": true}, nil, chatMembersListMaxPageSize}, + {"page-all, size explicit -> honored", map[string]bool{"page-all": true}, map[string]int{"page-size": 15}, 15}, + {"single page, size unset -> default", nil, nil, chatMembersListDefaultPageSize}, + } + for _, c := range cases { + rt := newChatMembersTestRuntime(t, noop, map[string]string{"chat-id": "oc_x"}, c.b, c.ints) + if got := effectiveChatMembersPageSize(rt); got != c.want { + t.Errorf("%s: want %d, got %d", c.name, c.want, got) + } + } +} + +// newChatMembersTestRuntime registers the shortcut's flags and returns a +// user-identity runtime wired to the given RoundTripper for multi-page mocking. +func newChatMembersTestRuntime(t *testing.T, rt http.RoundTripper, str map[string]string, b map[string]bool, ints map[string]int) *common.RuntimeContext { + t.Helper() + runtime := newUserShortcutRuntime(t, rt) + cmd := &cobra.Command{Use: "test"} + cmd.Flags().String("chat-id", "", "") + cmd.Flags().String("member-id-type", "open_id", "") + cmd.Flags().StringSlice("member-types", nil, "") + cmd.Flags().String("page-token", "", "") + cmd.Flags().Bool("page-all", false, "") + cmd.Flags().Int("page-size", 20, "") + cmd.Flags().Int("page-limit", 10, "") + cmd.Flags().Int("page-delay", 200, "") + if err := cmd.ParseFlags(nil); err != nil { + t.Fatalf("ParseFlags: %v", err) + } + for k, v := range str { + if err := cmd.Flags().Set(k, v); err != nil { + t.Fatalf("set %s: %v", k, err) + } + } + for k, v := range b { + if err := cmd.Flags().Set(k, strconv.FormatBool(v)); err != nil { + t.Fatalf("set %s: %v", k, err) + } + } + for k, v := range ints { + if err := cmd.Flags().Set(k, strconv.Itoa(v)); err != nil { + t.Fatalf("set %s: %v", k, err) + } + } + runtime.Cmd = cmd + return runtime +} + +// TestFetchChatMembers_PageAllMergesBucketsAndTruncations exercises the full +// fetch loop over mocked pages: users/bots merge across pages and the final +// page's truncations[] survives. +func TestFetchChatMembers_PageAllMergesBucketsAndTruncations(t *testing.T) { + calls := 0 + rt := shortcutRoundTripFunc(func(req *http.Request) (*http.Response, error) { + if !strings.Contains(req.URL.Path, "/open-apis/im/v1/chats/oc_test/members/list") { + return shortcutJSONResponse(404, map[string]interface{}{"code": 1}), nil + } + calls++ + token := req.URL.Query().Get("page_token") + if token == "" { + return shortcutJSONResponse(200, map[string]interface{}{ + "code": 0, + "data": cmlPage(us("u1", "u2"), us("b1"), []interface{}{}, true, "p2"), + }), nil + } + return shortcutJSONResponse(200, map[string]interface{}{ + "code": 0, + "data": cmlPage(us("u3"), us("b2"), []interface{}{map[string]interface{}{"limit": 100, "member_type": "user"}}, false, ""), + }), nil + }) + runtime := newChatMembersTestRuntime(t, rt, + map[string]string{"chat-id": "oc_test"}, + map[string]bool{"page-all": true}, + map[string]int{"page-size": 2, "page-limit": 0, "page-delay": 0}) + + res, err := fetchChatMembers(context.Background(), runtime, "oc_test") + if err != nil { + t.Fatalf("fetchChatMembers: %v", err) + } + if calls != 2 { + t.Errorf("want 2 page calls, got %d", calls) + } + if len(res.users) != 3 { + t.Errorf("users: want 3, got %d", len(res.users)) + } + if len(res.bots) != 2 { + t.Errorf("bots: want 2, got %d", len(res.bots)) + } + if len(res.truncations) != 1 { + t.Errorf("truncations: want 1 from last page, got %d", len(res.truncations)) + } + if res.hasMore { + t.Error("has_more: want false after draining all pages") + } +} + +// TestFetchChatMembers_PageLimitStops verifies --page-limit caps the loop and +// leaves has_more=true so the caller knows the result is incomplete. +func TestFetchChatMembers_PageLimitStops(t *testing.T) { + seq := 0 + rt := shortcutRoundTripFunc(func(req *http.Request) (*http.Response, error) { + // Every page reports more pages available, with an advancing token so the + // loop is stopped by --page-limit, not the non-advancing-token guard. + seq++ + return shortcutJSONResponse(200, map[string]interface{}{ + "code": 0, + "data": cmlPage(us("u"), nil, nil, true, fmt.Sprintf("p%d", seq)), + }), nil + }) + runtime := newChatMembersTestRuntime(t, rt, + map[string]string{"chat-id": "oc_test"}, + map[string]bool{"page-all": true}, + map[string]int{"page-size": 1, "page-limit": 3, "page-delay": 0}) + + res, err := fetchChatMembers(context.Background(), runtime, "oc_test") + if err != nil { + t.Fatalf("fetchChatMembers: %v", err) + } + if len(res.users) != 3 { + t.Errorf("users: want 3 (capped at page-limit), got %d", len(res.users)) + } + if !res.hasMore { + t.Error("has_more: want true (loop cut short by page-limit)") + } + errOut := runtime.IO().ErrOut.(*bytes.Buffer) + if !strings.Contains(errOut.String(), "reached page limit (3)") { + t.Errorf("want page-limit notice on stderr, got: %s", errOut.String()) + } +} diff --git a/shortcuts/im/shortcuts.go b/shortcuts/im/shortcuts.go index 1aff3f061..3dd032dad 100644 --- a/shortcuts/im/shortcuts.go +++ b/shortcuts/im/shortcuts.go @@ -10,6 +10,7 @@ func Shortcuts() []common.Shortcut { return []common.Shortcut{ ImChatCreate, ImChatList, + ImChatMembersList, ImChatMessageList, ImChatSearch, ImChatUpdate, diff --git a/shortcuts/mail/helpers.go b/shortcuts/mail/helpers.go index 5a859b5e9..52131a985 100644 --- a/shortcuts/mail/helpers.go +++ b/shortcuts/mail/helpers.go @@ -51,9 +51,8 @@ func hintSendDraft(runtime *common.RuntimeContext, mailboxID, draftID string) { // original message as read after a reply/reply-all/forward operation. func hintMarkAsRead(runtime *common.RuntimeContext, mailboxID, originalMessageID string) { fmt.Fprintf(runtime.IO().ErrOut, - "tip: mark original as read? lark-cli mail user_mailbox.messages batch_modify_message"+ - ` --params '{"user_mailbox_id":"%s"}' --data '{"message_ids":["%s"],"remove_label_ids":["UNREAD"]}'`+"\n", - sanitizeForTerminal(mailboxID), sanitizeForTerminal(originalMessageID)) + "tip: mark original as read? lark-cli mail +message-modify --mailbox '%s' --message-ids '%s' --remove-label-ids UNREAD\n", + shellQuoteForHint(mailboxID), shellQuoteForHint(originalMessageID)) } // hintReadReceiptRequest prints a stderr tip when a message that the caller diff --git a/shortcuts/mail/helpers_test.go b/shortcuts/mail/helpers_test.go index 57115c633..56ff5f453 100644 --- a/shortcuts/mail/helpers_test.go +++ b/shortcuts/mail/helpers_test.go @@ -465,14 +465,19 @@ func TestPrintWatchOutputSchema(t *testing.T) { // TestHintMarkAsRead verifies hint mark as read. func TestHintMarkAsRead(t *testing.T) { rt, _, stderr := newOutputRuntime(t) - // Inject ANSI escape + message ID to verify sanitization - hintMarkAsRead(rt, "me", "msg-\x1b[31m123") + hintMarkAsRead(rt, "mail box;$(whoami)", "msg-\x1b[31m123 'quoted'\nnext") out := stderr.String() if strings.Contains(out, "\x1b[") { t.Errorf("hintMarkAsRead should sanitize ANSI escapes, got: %q", out) } - if !strings.Contains(out, "msg-123") { - t.Errorf("hintMarkAsRead should contain sanitized message ID, got: %q", out) + if strings.Contains(out, "\nnext") { + t.Errorf("hintMarkAsRead should strip embedded newlines, got: %q", out) + } + if !strings.Contains(out, "--mailbox 'mail box;$(whoami)'") { + t.Errorf("hintMarkAsRead should quote mailbox for shell copy/paste, got: %q", out) + } + if !strings.Contains(out, "--message-ids 'msg-123 '\\''quoted'\\''next'") { + t.Errorf("hintMarkAsRead should quote message ID for shell copy/paste, got: %q", out) } } diff --git a/shortcuts/mail/mail_message_manage_test.go b/shortcuts/mail/mail_message_manage_test.go new file mode 100644 index 000000000..4edf2e38b --- /dev/null +++ b/shortcuts/mail/mail_message_manage_test.go @@ -0,0 +1,482 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package mail + +import ( + "encoding/json" + "errors" + "fmt" + "strings" + "testing" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/auth" + "github.com/larksuite/cli/internal/httpmock" + "github.com/larksuite/cli/internal/output" + "github.com/larksuite/cli/shortcuts/common" +) + +func messageManageID(suffix string) string { + return "msg_abcdefghijklmnop_" + suffix +} + +func stubMessageManagePost(reg *httpmock.Registry, endpoint string, body map[string]interface{}) *httpmock.Stub { + stub := &httpmock.Stub{ + Method: "POST", + URL: "/user_mailboxes/me/messages/" + endpoint, + Body: body, + } + reg.Register(stub) + return stub +} + +func decodeMessageManageSummary(t *testing.T, data map[string]interface{}) ([]interface{}, []interface{}) { + t.Helper() + success, ok := data["success_message_ids"].([]interface{}) + if !ok { + t.Fatalf("success_message_ids = %#v, want array", data["success_message_ids"]) + } + failed, ok := data["failed_message_ids"].([]interface{}) + if !ok { + t.Fatalf("failed_message_ids = %#v, want array", data["failed_message_ids"]) + } + return success, failed +} + +func requireMessageManageValidationParam(t *testing.T, err error, param string) *errs.ValidationError { + t.Helper() + if err == nil { + t.Fatalf("expected validation error for %s, got nil", param) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError for %s, got %T", param, err) + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed Problem for %s, got %T", param, err) + } + if problem.Category != errs.CategoryValidation || problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("problem = %s/%s, want validation/invalid_argument", problem.Category, problem.Subtype) + } + if validationErr.Param != param { + t.Fatalf("param = %q, want %q", validationErr.Param, param) + } + return validationErr +} + +func requireMessageManageFailedPrecondition(t *testing.T, err error) { + t.Helper() + if err == nil { + t.Fatal("expected failed precondition error, got nil") + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got %T", err) + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed Problem, got %T", err) + } + if problem.Category != errs.CategoryValidation || problem.Subtype != errs.SubtypeFailedPrecondition { + t.Fatalf("problem = %s/%s, want validation/failed_precondition", problem.Category, problem.Subtype) + } +} + +func TestMessageManage_NormalizeMessageIDs(t *testing.T) { + id1 := messageManageID("1") + id2 := messageManageID("2") + got, err := normalizeMessageManageIDs([]string{id1, id2, id1}) + if err != nil { + t.Fatalf("normalizeMessageManageIDs returned error: %v", err) + } + if len(got) != 2 || got[0] != id1 || got[1] != id2 { + t.Fatalf("ids = %v, want [%s %s]", got, id1, id2) + } + got, err = normalizeMessageManageIDs([]string{id1 + "," + id2, id1}) + if err != nil { + t.Fatalf("normalizeMessageManageIDs CSV/repeated returned error: %v", err) + } + if len(got) != 2 || got[0] != id1 || got[1] != id2 { + t.Fatalf("CSV/repeated ids = %v, want [%s %s]", got, id1, id2) + } + + cases := [][]string{ + {""}, + {" id_with_leading_space_12345"}, + {"msg_abcdefghijklmnop_1,msg_abcdefghijklmnop_2 "}, + {"1234567890123456"}, + {"short"}, + {"msg_abcdefghijklmnop!"}, + {"msg_abcdefghijklmnop\t"}, + {"msg_abcdefghijklmnop_1\nmsg_abcdefghijklmnop_2"}, + {"msg_abcdefghijklmnop_1", "msg_abcdefghijklmnop_2 "}, + } + for _, tc := range cases { + _, err := normalizeMessageManageIDs(tc) + requireMessageManageValidationParam(t, err, "--message-ids") + } +} + +func TestMessageModify_Metadata(t *testing.T) { + if MailMessageModify.Command != "+message-modify" { + t.Fatalf("Command = %q", MailMessageModify.Command) + } + if MailMessageModify.Risk != "write" { + t.Errorf("Risk = %q, want write", MailMessageModify.Risk) + } + if len(MailMessageModify.AuthTypes) != 1 || MailMessageModify.AuthTypes[0] != "user" { + t.Errorf("AuthTypes = %v, want [user]", MailMessageModify.AuthTypes) + } + requiredScopes := map[string]bool{ + "mail:user_mailbox.message:modify": true, + } + for _, scope := range MailMessageModify.Scopes { + delete(requiredScopes, scope) + } + if len(requiredScopes) != 0 { + t.Errorf("Scopes missing %v", requiredScopes) + } + if len(MailMessageModify.ConditionalScopes) != 1 || MailMessageModify.ConditionalScopes[0] != "mail:user_mailbox.folder:read" { + t.Errorf("ConditionalScopes = %v, want [mail:user_mailbox.folder:read]", MailMessageModify.ConditionalScopes) + } + flags := map[string]common.Flag{} + for _, fl := range MailMessageModify.Flags { + flags[fl.Name] = fl + } + for _, name := range []string{"mailbox", "message-ids", "add-label-ids", "remove-label-ids", "add-folder"} { + if _, ok := flags[name]; !ok { + t.Fatalf("missing --%s flag", name) + } + } + if flags["message-ids"].Type != "string_array" || !flags["message-ids"].Required { + t.Errorf("--message-ids = %#v, want required string_array", flags["message-ids"]) + } +} + +func TestMessageTrash_Metadata(t *testing.T) { + if MailMessageTrash.Command != "+message-trash" { + t.Fatalf("Command = %q", MailMessageTrash.Command) + } + if MailMessageTrash.Risk != "high-risk-write" { + t.Errorf("Risk = %q, want high-risk-write", MailMessageTrash.Risk) + } + if len(MailMessageTrash.AuthTypes) != 1 || MailMessageTrash.AuthTypes[0] != "user" { + t.Errorf("AuthTypes = %v, want [user]", MailMessageTrash.AuthTypes) + } + if len(MailMessageTrash.Scopes) != 1 || MailMessageTrash.Scopes[0] != "mail:user_mailbox.message:modify" { + t.Errorf("Scopes = %v, want [mail:user_mailbox.message:modify]", MailMessageTrash.Scopes) + } +} + +func TestMessageModify_LabelOnlyDoesNotRequireFolderReadScope(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + token := auth.GetStoredToken("test-app", "ou_testuser") + if token == nil { + t.Fatal("expected test token") + } + token.Scope = strings.ReplaceAll(token.Scope, " mail:user_mailbox.folder:read", "") + if err := auth.SetStoredToken(token); err != nil { + t.Fatalf("SetStoredToken() error = %v", err) + } + + id := messageManageID("1") + post := stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 0, "data": map[string]interface{}{}}) + + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id, + "--remove-label-ids", "UNREAD", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected err: %v", err) + } + var body map[string]interface{} + if err := json.Unmarshal(post.CapturedBody, &body); err != nil { + t.Fatalf("unmarshal captured body: %v", err) + } + removeLabels := body["remove_label_ids"].([]interface{}) + if len(removeLabels) != 1 || removeLabels[0] != "UNREAD" { + t.Fatalf("remove_label_ids = %#v, want [UNREAD]", removeLabels) + } +} + +func TestMessageModify_ReadReceiptRequestLabelIsSystemLabel(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + id := messageManageID("1") + post := stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 0, "data": map[string]interface{}{}}) + + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id, + "--remove-label-ids", "read_receipt_request", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected err: %v", err) + } + var body map[string]interface{} + if err := json.Unmarshal(post.CapturedBody, &body); err != nil { + t.Fatalf("unmarshal captured body: %v", err) + } + removeLabels := body["remove_label_ids"].([]interface{}) + if len(removeLabels) != 1 || removeLabels[0] != "READ_RECEIPT_REQUEST" { + t.Fatalf("remove_label_ids = %#v, want [READ_RECEIPT_REQUEST]", removeLabels) + } +} + +func TestMessageModify_LabelFolderNormalizationAndValidationAPIs(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + id := messageManageID("1") + reg.Register(&httpmock.Stub{Method: "GET", URL: "/user_mailboxes/me/labels/customA", Body: map[string]interface{}{"code": 0, "data": map[string]interface{}{"label_id": "customA"}}}) + reg.Register(&httpmock.Stub{Method: "GET", URL: "/user_mailboxes/me/folders/folderA", Body: map[string]interface{}{"code": 0, "data": map[string]interface{}{"folder_id": "folderA"}}}) + post := stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 0, "data": map[string]interface{}{}}) + + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id, + "--add-label-ids", "unread,customA", + "--remove-label-ids", "FLAGGED", + "--add-folder", "folderA", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected err: %v", err) + } + var body map[string]interface{} + if err := json.Unmarshal(post.CapturedBody, &body); err != nil { + t.Fatalf("unmarshal captured body: %v", err) + } + if got := body["add_folder"]; got != "folderA" { + t.Errorf("add_folder = %v, want folderA", got) + } + addLabels := body["add_label_ids"].([]interface{}) + if addLabels[0] != "UNREAD" || addLabels[1] != "customA" { + t.Errorf("add_label_ids = %#v, want [UNREAD customA]", addLabels) + } + removeLabels := body["remove_label_ids"].([]interface{}) + if removeLabels[0] != "FLAGGED" { + t.Errorf("remove_label_ids = %#v, want [FLAGGED]", removeLabels) + } + success, failed := decodeMessageManageSummary(t, decodeShortcutEnvelopeData(t, stdout)) + if len(success) != 1 || success[0] != id || len(failed) != 0 { + t.Errorf("summary success=%v failed=%v", success, failed) + } +} + +func TestMessageModify_RejectsLabelIntersectionAndTrashFolder(t *testing.T) { + f, stdout, _, _ := mailShortcutTestFactory(t) + id := messageManageID("1") + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id, + "--add-label-ids", "unread", + "--remove-label-ids", "UNREAD", + }, f, stdout) + requireMessageManageValidationParam(t, err, "--add-label-ids") + if !strings.Contains(err.Error(), "label cannot be both added and removed") { + t.Fatalf("error = %v, want label intersection validation", err) + } + + err = runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id, + "--add-folder", "trash", + }, f, stdout) + requireMessageManageValidationParam(t, err, "--add-folder") + if !strings.Contains(err.Error(), "use +message-trash") { + t.Fatalf("error = %v, want TRASH validation", err) + } +} + +func TestMessageModify_EmptyOperationDoesNotCallPost(t *testing.T) { + f, stdout, _, _ := mailShortcutTestFactory(t) + id1 := messageManageID("1") + id2 := messageManageID("2") + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id1 + "," + id2 + "," + id1, + }, f, stdout) + if err != nil { + t.Fatalf("unexpected err: %v", err) + } + success, failed := decodeMessageManageSummary(t, decodeShortcutEnvelopeData(t, stdout)) + if len(success) != 2 || success[0] != id1 || success[1] != id2 || len(failed) != 0 { + t.Fatalf("summary success=%v failed=%v", success, failed) + } +} + +func TestMessageModify_BatchesAndAggregatesPartialFailure(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + ids := make([]string, 41) + for i := range ids { + ids[i] = messageManageID(fmt.Sprintf("%02d", i)) + } + first := stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 0, "data": map[string]interface{}{}}) + second := stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 1230001, "msg": "bad request"}) + third := stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 0, "data": map[string]interface{}{}}) + + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", strings.Join(ids, ","), + "--add-folder", "archive", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected err: %v", err) + } + for idx, stub := range []*httpmock.Stub{first, second, third} { + var body map[string]interface{} + if err := json.Unmarshal(stub.CapturedBody, &body); err != nil { + t.Fatalf("batch %d body unmarshal: %v", idx+1, err) + } + messageIDs := body["message_ids"].([]interface{}) + want := []int{20, 20, 1}[idx] + if len(messageIDs) != want { + t.Fatalf("batch %d size = %d, want %d", idx+1, len(messageIDs), want) + } + if body["add_folder"] != "ARCHIVED" { + t.Fatalf("batch %d add_folder = %v, want ARCHIVED", idx+1, body["add_folder"]) + } + } + success, failed := decodeMessageManageSummary(t, decodeShortcutEnvelopeData(t, stdout)) + if len(success) != 21 || len(failed) != 20 { + t.Fatalf("success=%d failed=%d, want 21/20", len(success), len(failed)) + } +} + +func TestMessageModify_AllBatchesFailReturnsError(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + id := messageManageID("1") + stubMessageManagePost(reg, "batch_modify", map[string]interface{}{"code": 1230001, "msg": "bad request"}) + + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id, + "--add-folder", "archive", + }, f, stdout) + requireMessageManageFailedPrecondition(t, err) +} + +func TestMessageModify_DryRunShowsPlanWithoutValidationGET(t *testing.T) { + f, stdout, _, _ := mailShortcutTestFactory(t) + id1 := messageManageID("1") + id2 := messageManageID("2") + err := runMountedMailShortcut(t, MailMessageModify, []string{ + "+message-modify", + "--message-ids", id1 + "," + id2, + "--add-label-ids", "customA", + "--add-folder", "folderA", + "--dry-run", + }, f, stdout) + if err != nil { + t.Fatalf("dry-run failed: %v", err) + } + out := stdout.String() + for _, want := range []string{ + `/user_mailboxes/me/messages/batch_modify`, + `validation_api_plan`, + `/user_mailboxes/me/labels/customA`, + `/user_mailboxes/me/folders/folderA`, + `will_validate`, + `batch_size`, + } { + if !strings.Contains(out, want) { + t.Fatalf("dry-run output missing %q; got %s", want, out) + } + } +} + +func TestMessageTrash_RequiresYesAndBatches(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + id1 := messageManageID("1") + id2 := messageManageID("2") + err := runMountedMailShortcut(t, MailMessageTrash, []string{ + "+message-trash", + "--message-ids", id1 + "," + id2, + }, f, stdout) + if err == nil { + t.Fatal("expected confirmation error, got nil") + } + if code := output.ExitCodeOf(err); code != output.ExitConfirmationRequired { + t.Fatalf("exit code = %d, want %d", code, output.ExitConfirmationRequired) + } + + post := stubMessageManagePost(reg, "batch_trash", map[string]interface{}{"code": 0, "data": map[string]interface{}{}}) + err = runMountedMailShortcut(t, MailMessageTrash, []string{ + "+message-trash", + "--message-ids", id1 + "," + id2, + "--yes", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected err with --yes: %v", err) + } + var body map[string]interface{} + if err := json.Unmarshal(post.CapturedBody, &body); err != nil { + t.Fatalf("unmarshal captured body: %v", err) + } + if got := len(body["message_ids"].([]interface{})); got != 2 { + t.Fatalf("message_ids len = %d, want 2", got) + } + success, failed := decodeMessageManageSummary(t, decodeShortcutEnvelopeData(t, stdout)) + if len(success) != 2 || len(failed) != 0 { + t.Fatalf("summary success=%v failed=%v", success, failed) + } +} + +func TestMessageTrash_AllBatchesFailReturnsError(t *testing.T) { + f, stdout, _, reg := mailShortcutTestFactory(t) + id := messageManageID("1") + stubMessageManagePost(reg, "batch_trash", map[string]interface{}{"code": 1230001, "msg": "bad request"}) + + err := runMountedMailShortcut(t, MailMessageTrash, []string{ + "+message-trash", + "--message-ids", id, + "--yes", + }, f, stdout) + requireMessageManageFailedPrecondition(t, err) +} + +func TestMessageManage_RejectsWhitespaceBeforeAPI(t *testing.T) { + id1 := messageManageID("1") + id2 := messageManageID("2") + cases := []struct { + name string + shortcut common.Shortcut + args []string + }{ + { + name: "trash newline in repeated flag", + shortcut: MailMessageTrash, + args: []string{"+message-trash", "--message-ids", id1 + "\n" + id2, "--yes"}, + }, + { + name: "trash tab in csv flag", + shortcut: MailMessageTrash, + args: []string{"+message-trash", "--message-ids", id1 + ",\t" + id2, "--yes"}, + }, + { + name: "modify space in repeated flag", + shortcut: MailMessageModify, + args: []string{"+message-modify", "--message-ids", id1, "--message-ids", id2 + " ", "--add-folder", "archive"}, + }, + { + name: "modify space in csv flag", + shortcut: MailMessageModify, + args: []string{"+message-modify", "--message-ids", id1 + ", " + id2, "--add-folder", "archive"}, + }, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + f, stdout, _, _ := mailShortcutTestFactory(t) + err := runMountedMailShortcut(t, tc.shortcut, tc.args, f, stdout) + if err == nil { + t.Fatal("expected validation error, got nil") + } + if code := output.ExitCodeOf(err); code != output.ExitValidation { + t.Fatalf("exit code = %d, want %d; err=%v", code, output.ExitValidation, err) + } + if !strings.Contains(err.Error(), "must not contain whitespace or control characters") { + t.Fatalf("error = %v, want whitespace/control validation", err) + } + }) + } +} diff --git a/shortcuts/mail/mail_message_modify.go b/shortcuts/mail/mail_message_modify.go new file mode 100644 index 000000000..d88d93d6e --- /dev/null +++ b/shortcuts/mail/mail_message_modify.go @@ -0,0 +1,141 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package mail + +import ( + "context" + + "github.com/larksuite/cli/shortcuts/common" +) + +type messageModifyInput struct { + MessageIDs []string + AddLabelIDs []string + RemoveLabelIDs []string + AddFolder string + CustomLabelIDs []string + CustomFolderID string + ValidationAPIPlans []validationAPIPlan +} + +// MailMessageModify is the `+message-modify` shortcut: apply labels, unread +// state labels, or a folder move to existing messages in batches of 20. +var MailMessageModify = common.Shortcut{ + Service: "mail", + Command: "+message-modify", + Description: "Modify existing mail messages by adding/removing label IDs or moving them to a folder. Batches message IDs in groups of 20 and keeps output compact.", + Risk: "write", + Scopes: []string{"mail:user_mailbox.message:modify"}, + ConditionalScopes: []string{ + "mail:user_mailbox.folder:read", + }, + AuthTypes: []string{"user"}, + HasFormat: true, + Flags: []common.Flag{ + {Name: "mailbox", Desc: "Mailbox email address that owns the messages (default: me)."}, + {Name: "message-ids", Type: "string_array", Required: true, Desc: "Message IDs to modify; comma-separated or repeat the flag."}, + {Name: "add-label-ids", Type: "string_slice", Desc: "Label IDs to add. System labels unread/important/other/flagged are normalized to upper case."}, + {Name: "remove-label-ids", Type: "string_slice", Desc: "Label IDs to remove. System labels unread/important/other/flagged are normalized to upper case."}, + {Name: "add-folder", Desc: "Folder ID to move messages to. System folders inbox/sent/spam/archive/archived are normalized; TRASH is rejected, use +message-trash."}, + }, + Validate: validateMessageModify, + DryRun: dryRunMessageModify, + Execute: executeMessageModify, +} + +func validateMessageModify(ctx context.Context, rt *common.RuntimeContext) error { + _, err := buildMessageModifyInput(rt) + return err +} + +func dryRunMessageModify(ctx context.Context, rt *common.RuntimeContext) *common.DryRunAPI { + mailboxID := resolveMailboxID(rt) + input, _ := buildMessageModifyInput(rt) + api := common.NewDryRunAPI(). + Desc("Modify messages sequentially in batches of 20; dry-run does not call label/folder validation APIs"). + Set("batch_size", mailMessageManageBatchSize). + Set("batches", chunkMessageManageIDs(input.MessageIDs)). + Set("validation_api_plan", input.ValidationAPIPlans) + for _, batch := range chunkMessageManageIDs(input.MessageIDs) { + api = api.POST(mailboxPath(mailboxID, "messages", "batch_modify")). + Body(messageManageBody(batch, input.AddLabelIDs, input.RemoveLabelIDs, input.AddFolder)) + } + return api +} + +func executeMessageModify(ctx context.Context, rt *common.RuntimeContext) error { + mailboxID := resolveMailboxID(rt) + input, err := buildMessageModifyInput(rt) + if err != nil { + return err + } + if err := validateCustomMessageManageLabels(rt, mailboxID, input.CustomLabelIDs); err != nil { + return err + } + if err := validateCustomMessageManageFolder(rt, mailboxID, input.CustomFolderID); err != nil { + return err + } + + if len(input.AddLabelIDs) == 0 && len(input.RemoveLabelIDs) == 0 && input.AddFolder == "" { + emitMessageManageSummary(rt, messageManageSummary{ + SuccessMessageIDs: input.MessageIDs, + FailedMessageIDs: []messageManageFailure{}, + }, true) + return nil + } + + summary := messageManageSummary{FailedMessageIDs: []messageManageFailure{}} + for _, batch := range chunkMessageManageIDs(input.MessageIDs) { + _, err := rt.CallAPITyped("POST", mailboxPath(mailboxID, "messages", "batch_modify"), nil, + messageManageBody(batch, input.AddLabelIDs, input.RemoveLabelIDs, input.AddFolder)) + if err != nil { + for _, id := range batch { + summary.FailedMessageIDs = append(summary.FailedMessageIDs, messageManageFailure{MessageID: id, Reason: err.Error()}) + } + continue + } + summary.SuccessMessageIDs = append(summary.SuccessMessageIDs, batch...) + } + emitMessageManageSummary(rt, summary, false) + if len(summary.SuccessMessageIDs) == 0 && len(summary.FailedMessageIDs) > 0 { + return mailFailedPreconditionError("all message modify batches failed") + } + return nil +} + +func buildMessageModifyInput(rt *common.RuntimeContext) (messageModifyInput, error) { + messageIDs, err := normalizeMessageManageIDs(rt.StrArray("message-ids")) + if err != nil { + return messageModifyInput{}, err + } + addLabels, customAddLabels, err := normalizeMessageManageLabels(rt.StrSlice("add-label-ids"), "--add-label-ids") + if err != nil { + return messageModifyInput{}, err + } + removeLabels, customRemoveLabels, err := normalizeMessageManageLabels(rt.StrSlice("remove-label-ids"), "--remove-label-ids") + if err != nil { + return messageModifyInput{}, err + } + if err := validateLabelIntersection(addLabels, removeLabels); err != nil { + return messageModifyInput{}, err + } + folder, customFolder, err := normalizeMessageManageFolder(rt.Str("add-folder")) + if err != nil { + return messageModifyInput{}, err + } + customLabels := append(customAddLabels, customRemoveLabels...) + customFolderID := "" + if customFolder { + customFolderID = folder + } + return messageModifyInput{ + MessageIDs: messageIDs, + AddLabelIDs: addLabels, + RemoveLabelIDs: removeLabels, + AddFolder: folder, + CustomLabelIDs: customLabels, + CustomFolderID: customFolderID, + ValidationAPIPlans: messageManageValidationPlan(resolveMailboxID(rt), customLabels, customFolderID), + }, nil +} diff --git a/shortcuts/mail/mail_message_trash.go b/shortcuts/mail/mail_message_trash.go new file mode 100644 index 000000000..b1b0f6478 --- /dev/null +++ b/shortcuts/mail/mail_message_trash.go @@ -0,0 +1,75 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package mail + +import ( + "context" + + "github.com/larksuite/cli/shortcuts/common" +) + +// MailMessageTrash is the `+message-trash` shortcut: soft-delete existing +// messages in batches of 20 via batch_trash. Risk is high-risk-write, so the +// runner requires --yes before Execute. +var MailMessageTrash = common.Shortcut{ + Service: "mail", + Command: "+message-trash", + Description: "Soft-delete existing mail messages. Batches message IDs in groups of 20 and calls batch_trash sequentially. Requires --yes.", + Risk: "high-risk-write", + Scopes: []string{"mail:user_mailbox.message:modify"}, + AuthTypes: []string{"user"}, + HasFormat: true, + Flags: []common.Flag{ + {Name: "mailbox", Desc: "Mailbox email address that owns the messages (default: me)."}, + {Name: "message-ids", Type: "string_array", Required: true, Desc: "Message IDs to soft-delete; comma-separated or repeat the flag."}, + }, + Validate: validateMessageTrash, + DryRun: dryRunMessageTrash, + Execute: executeMessageTrash, +} + +func validateMessageTrash(ctx context.Context, rt *common.RuntimeContext) error { + _, err := normalizeMessageManageIDs(rt.StrArray("message-ids")) + return err +} + +func dryRunMessageTrash(ctx context.Context, rt *common.RuntimeContext) *common.DryRunAPI { + mailboxID := resolveMailboxID(rt) + messageIDs, _ := normalizeMessageManageIDs(rt.StrArray("message-ids")) + api := common.NewDryRunAPI(). + Desc("Soft-delete messages sequentially in batches of 20"). + Set("batch_size", mailMessageManageBatchSize). + Set("batches", chunkMessageManageIDs(messageIDs)) + for _, batch := range chunkMessageManageIDs(messageIDs) { + api = api.POST(mailboxPath(mailboxID, "messages", "batch_trash")). + Body(map[string]interface{}{"message_ids": batch}) + } + return api +} + +func executeMessageTrash(ctx context.Context, rt *common.RuntimeContext) error { + mailboxID := resolveMailboxID(rt) + messageIDs, err := normalizeMessageManageIDs(rt.StrArray("message-ids")) + if err != nil { + return err + } + + summary := messageManageSummary{FailedMessageIDs: []messageManageFailure{}} + for _, batch := range chunkMessageManageIDs(messageIDs) { + _, err := rt.CallAPITyped("POST", mailboxPath(mailboxID, "messages", "batch_trash"), nil, + map[string]interface{}{"message_ids": batch}) + if err != nil { + for _, id := range batch { + summary.FailedMessageIDs = append(summary.FailedMessageIDs, messageManageFailure{MessageID: id, Reason: err.Error()}) + } + continue + } + summary.SuccessMessageIDs = append(summary.SuccessMessageIDs, batch...) + } + emitMessageManageSummary(rt, summary, false) + if len(summary.SuccessMessageIDs) == 0 && len(summary.FailedMessageIDs) > 0 { + return mailFailedPreconditionError("all message trash batches failed") + } + return nil +} diff --git a/shortcuts/mail/mail_shortcut_test.go b/shortcuts/mail/mail_shortcut_test.go index 7d7ebb96c..4ae0f8d97 100644 --- a/shortcuts/mail/mail_shortcut_test.go +++ b/shortcuts/mail/mail_shortcut_test.go @@ -44,7 +44,7 @@ func mailShortcutTestFactory(t *testing.T) (*cmdutil.Factory, *bytes.Buffer, *by RefreshToken: "test-refresh-token", ExpiresAt: time.Now().Add(1 * time.Hour).UnixMilli(), RefreshExpiresAt: time.Now().Add(24 * time.Hour).UnixMilli(), - Scope: "mail:user_mailbox.messages:write mail:user_mailbox.messages:read mail:user_mailbox.message:modify mail:user_mailbox.message:readonly mail:user_mailbox.message.address:read mail:user_mailbox.message.subject:read mail:user_mailbox.message.body:read mail:user_mailbox:readonly", + Scope: "mail:user_mailbox.messages:write mail:user_mailbox.messages:read mail:user_mailbox.message:modify mail:user_mailbox.message:readonly mail:user_mailbox.message.address:read mail:user_mailbox.message.subject:read mail:user_mailbox.message.body:read mail:user_mailbox:readonly mail:user_mailbox.folder:read", GrantedAt: time.Now().Add(-1 * time.Hour).UnixMilli(), } if err := auth.SetStoredToken(token); err != nil { diff --git a/shortcuts/mail/message_manage_helpers.go b/shortcuts/mail/message_manage_helpers.go new file mode 100644 index 000000000..56807715e --- /dev/null +++ b/shortcuts/mail/message_manage_helpers.go @@ -0,0 +1,283 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package mail + +import ( + "fmt" + "io" + "strings" + "unicode" + + "github.com/larksuite/cli/internal/output" + "github.com/larksuite/cli/shortcuts/common" +) + +const mailMessageManageBatchSize = 20 + +var messageManageSystemLabels = map[string]string{ + "UNREAD": "UNREAD", + "IMPORTANT": "IMPORTANT", + "OTHER": "OTHER", + "FLAGGED": "FLAGGED", + "READ_RECEIPT_REQUEST": "READ_RECEIPT_REQUEST", +} + +var messageManageSystemFolders = map[string]string{ + "INBOX": "INBOX", + "SENT": "SENT", + "SPAM": "SPAM", + "ARCHIVE": "ARCHIVED", + "ARCHIVED": "ARCHIVED", +} + +type messageManageSummary struct { + SuccessMessageIDs []string `json:"success_message_ids"` + FailedMessageIDs []messageManageFailure `json:"failed_message_ids"` +} + +type messageManageFailure struct { + MessageID string `json:"message_id"` + Reason string `json:"reason"` +} + +type validationAPIPlan struct { + Method string `json:"method"` + Path string `json:"path"` + WillValidate bool `json:"will_validate"` +} + +func normalizeMessageManageIDs(raw []string) ([]string, error) { + if len(raw) == 0 { + return nil, mailValidationParamError("--message-ids", "--message-ids is required") + } + parts, err := splitMessageManageIDTokens(raw) + if err != nil { + return nil, err + } + ids := make([]string, 0, len(parts)) + seen := make(map[string]struct{}, len(parts)) + for i, part := range parts { + if part == "" { + return nil, mailValidationParamError("--message-ids", "--message-ids entry %d is empty; remove extra commas or provide valid message IDs", i+1) + } + id := strings.TrimSpace(part) + if id == "" { + return nil, mailValidationParamError("--message-ids", "--message-ids entry %d is empty; remove extra commas or provide valid message IDs", i+1) + } + if id != part { + return nil, mailValidationParamError("--message-ids", "--message-ids entry %d (%q): must not contain leading or trailing whitespace", i+1, part) + } + if err := validateMessageManageID(id, i); err != nil { + return nil, err + } + if _, ok := seen[id]; ok { + continue + } + seen[id] = struct{}{} + ids = append(ids, id) + } + if len(ids) == 0 { + return nil, mailValidationParamError("--message-ids", "--message-ids is required") + } + return ids, nil +} + +func splitMessageManageIDTokens(raw []string) ([]string, error) { + parts := make([]string, 0, len(raw)) + for i, token := range raw { + for _, r := range token { + if unicode.IsSpace(r) || unicode.IsControl(r) { + return nil, mailValidationParamError("--message-ids", "--message-ids entry %d (%q): must not contain whitespace or control characters", i+1, token) + } + } + parts = append(parts, strings.Split(token, ",")...) + } + return parts, nil +} + +func validateMessageManageID(id string, index int) error { + if len(id) < 16 { + return mailValidationParamError("--message-ids", "--message-ids entry %d (%q): length must be at least 16 characters", index+1, id) + } + if strings.Trim(id, "0123456789") == "" { + return mailValidationParamError("--message-ids", "--message-ids entry %d (%q): numeric primary IDs are not supported; pass the Open API message_id from mail output", index+1, id) + } + for _, r := range id { + if unicode.IsSpace(r) || unicode.IsControl(r) { + return mailValidationParamError("--message-ids", "--message-ids entry %d (%q): must not contain whitespace or control characters", index+1, id) + } + if (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') { + continue + } + switch r { + case '+', '/', '=', '_', '-': + continue + default: + return mailValidationParamError("--message-ids", "--message-ids entry %d (%q): contains characters outside the Open API message_id character set", index+1, id) + } + } + return nil +} + +func normalizeMessageManageLabels(raw []string, flagName string) ([]string, []string, error) { + labels := make([]string, 0, len(raw)) + custom := make([]string, 0, len(raw)) + seen := make(map[string]struct{}, len(raw)) + for i, part := range raw { + id := strings.TrimSpace(part) + if id == "" { + return nil, nil, mailValidationParamError(flagName, "%s entry %d is empty; remove extra commas or provide valid label IDs", flagName, i+1) + } + if id != part { + return nil, nil, mailValidationParamError(flagName, "%s entry %d (%q): must not contain leading or trailing whitespace", flagName, i+1, part) + } + normalized := id + if system, ok := messageManageSystemLabels[strings.ToUpper(id)]; ok { + normalized = system + } else { + custom = append(custom, id) + } + if _, ok := seen[normalized]; ok { + continue + } + seen[normalized] = struct{}{} + labels = append(labels, normalized) + } + if len(labels) > 20 { + return nil, nil, mailValidationParamError(flagName, "%s accepts at most 20 label IDs (got %d)", flagName, len(labels)) + } + return labels, custom, nil +} + +func validateLabelIntersection(add, remove []string) error { + removeSet := make(map[string]struct{}, len(remove)) + for _, id := range remove { + removeSet[id] = struct{}{} + } + for _, id := range add { + if _, ok := removeSet[id]; ok { + return mailValidationParamError("--add-label-ids", "label cannot be both added and removed: %s", id) + } + } + return nil +} + +func normalizeMessageManageFolder(raw string) (string, bool, error) { + if raw == "" { + return "", false, nil + } + folder := strings.TrimSpace(raw) + if folder == "" { + return "", false, mailValidationParamError("--add-folder", "--add-folder must not be empty") + } + if folder != raw { + return "", false, mailValidationParamError("--add-folder", "--add-folder %q must not contain leading or trailing whitespace", raw) + } + if strings.EqualFold(folder, "TRASH") { + return "", false, mailValidationParamError("--add-folder", "TRASH is not supported by +message-modify; use +message-trash") + } + if system, ok := messageManageSystemFolders[strings.ToUpper(folder)]; ok { + return system, false, nil + } + return folder, true, nil +} + +func chunkMessageManageIDs(ids []string) [][]string { + if len(ids) == 0 { + return nil + } + chunks := make([][]string, 0, (len(ids)+mailMessageManageBatchSize-1)/mailMessageManageBatchSize) + for start := 0; start < len(ids); start += mailMessageManageBatchSize { + end := start + mailMessageManageBatchSize + if end > len(ids) { + end = len(ids) + } + chunks = append(chunks, ids[start:end]) + } + return chunks +} + +func validateCustomMessageManageLabels(rt *common.RuntimeContext, mailboxID string, ids []string) error { + if len(ids) == 0 { + return nil + } + if err := validateLabelReadScope(rt); err != nil { + return err + } + seen := map[string]struct{}{} + for _, id := range ids { + if _, ok := seen[id]; ok { + continue + } + seen[id] = struct{}{} + if _, err := rt.CallAPITyped("GET", mailboxPath(mailboxID, "labels", id), nil, nil); err != nil { + return mailDecorateProblemMessage(err, "label not found: %s", id) + } + } + return nil +} + +func validateCustomMessageManageFolder(rt *common.RuntimeContext, mailboxID, id string) error { + if id == "" { + return nil + } + if err := validateFolderReadScope(rt); err != nil { + return err + } + if _, err := rt.CallAPITyped("GET", mailboxPath(mailboxID, "folders", id), nil, nil); err != nil { + return mailDecorateProblemMessage(err, "folder not found: %s", id) + } + return nil +} + +func messageManageBody(ids, addLabels, removeLabels []string, addFolder string) map[string]interface{} { + body := map[string]interface{}{"message_ids": ids} + if len(addLabels) > 0 { + body["add_label_ids"] = addLabels + } + if len(removeLabels) > 0 { + body["remove_label_ids"] = removeLabels + } + if addFolder != "" { + body["add_folder"] = addFolder + } + return body +} + +func messageManageValidationPlan(mailboxID string, customLabels []string, customFolder string) []validationAPIPlan { + plans := make([]validationAPIPlan, 0, len(customLabels)+1) + seenLabels := map[string]struct{}{} + for _, id := range customLabels { + if _, ok := seenLabels[id]; ok { + continue + } + seenLabels[id] = struct{}{} + plans = append(plans, validationAPIPlan{ + Method: "GET", + Path: mailboxPath(mailboxID, "labels", id), + WillValidate: true, + }) + } + if customFolder != "" { + plans = append(plans, validationAPIPlan{ + Method: "GET", + Path: mailboxPath(mailboxID, "folders", customFolder), + WillValidate: true, + }) + } + return plans +} + +func emitMessageManageSummary(rt *common.RuntimeContext, summary messageManageSummary, noAPICalls bool) { + rt.OutFormat(summary, &output.Meta{Count: len(summary.SuccessMessageIDs)}, func(w io.Writer) { + fmt.Fprintf(w, "success_message_ids: %d\n", len(summary.SuccessMessageIDs)) + fmt.Fprintf(w, "failed_message_ids: %d\n", len(summary.FailedMessageIDs)) + if noAPICalls { + fmt.Fprintln(w, "No changes requested; no API calls were made.") + } + for _, item := range summary.FailedMessageIDs { + fmt.Fprintf(w, "- %s: %s\n", item.MessageID, item.Reason) + } + }) +} diff --git a/shortcuts/mail/shortcuts.go b/shortcuts/mail/shortcuts.go index 2df01a6f3..c7a9c99c1 100644 --- a/shortcuts/mail/shortcuts.go +++ b/shortcuts/mail/shortcuts.go @@ -10,6 +10,8 @@ func Shortcuts() []common.Shortcut { return []common.Shortcut{ MailMessage, MailMessages, + MailMessageModify, + MailMessageTrash, MailThread, MailTriage, MailWatch, diff --git a/shortcuts/markdown/helpers.go b/shortcuts/markdown/helpers.go index aa792fb4c..6f6497579 100644 --- a/shortcuts/markdown/helpers.go +++ b/shortcuts/markdown/helpers.go @@ -715,9 +715,15 @@ func markdownUploadProblem(err error, action string) error { case 90003087: appendMarkdownProblemHint(err, "The current tenant or user may not have document capabilities enabled. Ask an administrator to verify document-module access.") case 1061003, 1061044: - appendMarkdownProblemHint(err, "Check whether the target folder or wiki node still exists, and verify the token you passed to the command.") + appendMarkdownProblemHint(err, "Check whether the target folder or wiki node still exists, and verify the parent token type. For Drive folders, pass --folder-token with a Drive folder token/URL; for wiki nodes, pass --wiki-token with a wiki node token/URL.") case 1061004, 1062501: appendMarkdownProblemHint(err, "Check whether the current identity has write access to the target folder or wiki node.") + case 1061101: + appendMarkdownProblemHint(err, "The target Drive/wiki storage quota is exhausted. Free space, choose another parent folder/wiki node, or ask an administrator to raise quota before retrying.") + case 233523001: + appendMarkdownProblemHint(err, "The upstream document service returned a transient server error. Retry later; if it repeats, keep the log_id/request_id for service-side investigation.") + case 99991400: + appendMarkdownProblemHint(err, "The upload API is rate limited. Stop immediate retries and retry later with exponential backoff.") } } return err diff --git a/shortcuts/markdown/markdown_create.go b/shortcuts/markdown/markdown_create.go index bd4f22812..46750f45e 100644 --- a/shortcuts/markdown/markdown_create.go +++ b/shortcuts/markdown/markdown_create.go @@ -9,6 +9,7 @@ import ( "io" "strings" + "github.com/larksuite/cli/internal/validate" "github.com/larksuite/cli/shortcuts/common" ) @@ -30,27 +31,19 @@ var MarkdownCreate = common.Shortcut{ Tips: []string{ "Omit both --folder-token and --wiki-token to create the Markdown file in the caller's Drive root folder.", "Use --wiki-token to create the Markdown file under a wiki node; the shortcut maps this to parent_type=wiki automatically.", + "--folder-token and --wiki-token also accept full Lark URLs and normalize them to the required token.", }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { - return validateMarkdownSpec(runtime, markdownUploadSpec{ - FileName: strings.TrimSpace(runtime.Str("name")), - FolderToken: strings.TrimSpace(runtime.Str("folder-token")), - WikiToken: strings.TrimSpace(runtime.Str("wiki-token")), - FilePath: strings.TrimSpace(runtime.Str("file")), - FileSet: runtime.Changed("file"), - Content: runtime.Str("content"), - ContentSet: runtime.Changed("content"), - }, true) + spec, err := readMarkdownCreateSpec(runtime) + if err != nil { + return err + } + return validateMarkdownSpec(runtime, spec, true) }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { - spec := markdownUploadSpec{ - FileName: strings.TrimSpace(runtime.Str("name")), - FolderToken: strings.TrimSpace(runtime.Str("folder-token")), - WikiToken: strings.TrimSpace(runtime.Str("wiki-token")), - FilePath: strings.TrimSpace(runtime.Str("file")), - FileSet: runtime.Changed("file"), - Content: runtime.Str("content"), - ContentSet: runtime.Changed("content"), + spec, err := readMarkdownCreateSpec(runtime) + if err != nil { + return common.NewDryRunAPI().Set("error", err.Error()) } fileSize, err := markdownSourceSize(runtime, spec) if err != nil { @@ -71,14 +64,9 @@ var MarkdownCreate = common.Shortcut{ return dry }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { - spec := markdownUploadSpec{ - FileName: strings.TrimSpace(runtime.Str("name")), - FolderToken: strings.TrimSpace(runtime.Str("folder-token")), - WikiToken: strings.TrimSpace(runtime.Str("wiki-token")), - FilePath: strings.TrimSpace(runtime.Str("file")), - FileSet: runtime.Changed("file"), - Content: runtime.Str("content"), - ContentSet: runtime.Changed("content"), + spec, err := readMarkdownCreateSpec(runtime) + if err != nil { + return err } fileSize, err := markdownSourceSize(runtime, spec) if err != nil { @@ -115,3 +103,139 @@ var MarkdownCreate = common.Shortcut{ return nil }, } + +func readMarkdownCreateSpec(runtime *common.RuntimeContext) (markdownUploadSpec, error) { + spec := markdownUploadSpec{ + FileName: strings.TrimSpace(runtime.Str("name")), + FolderToken: strings.TrimSpace(runtime.Str("folder-token")), + WikiToken: strings.TrimSpace(runtime.Str("wiki-token")), + FilePath: strings.TrimSpace(runtime.Str("file")), + FileSet: runtime.Changed("file"), + Content: runtime.Str("content"), + ContentSet: runtime.Changed("content"), + } + return normalizeMarkdownCreateTargetSpec(spec) +} + +func normalizeMarkdownCreateTargetSpec(spec markdownUploadSpec) (markdownUploadSpec, error) { + if spec.FolderToken != "" { + token, err := normalizeMarkdownFolderToken(spec.FolderToken) + if err != nil { + return markdownUploadSpec{}, err + } + spec.FolderToken = token + } + if spec.WikiToken != "" { + token, err := normalizeMarkdownWikiToken(spec.WikiToken) + if err != nil { + return markdownUploadSpec{}, err + } + spec.WikiToken = token + } + return spec, nil +} + +func normalizeMarkdownFolderToken(token string) (string, error) { + token = strings.TrimSpace(token) + if strings.Contains(token, "://") { + ref, ok := common.ParseResourceURL(token) + if !ok { + return "", markdownValidationParamError("--folder-token", "--folder-token URL is unsupported"). + WithHint("Pass a Drive folder URL or raw folder token.") + } + if ref.Type != "folder" { + return "", markdownValidationParamError("--folder-token", + "--folder-token must identify a Drive folder; got a %s URL", + ref.Type, + ).WithHint("Use --wiki-token for wiki nodes or pass a Drive folder URL/token.") + } + if err := validateMarkdownTargetTokenName(ref.Token, "--folder-token"); err != nil { + return "", err + } + return ref.Token, nil + } + if err := rejectMarkdownPartialToken(token, "--folder-token"); err != nil { + return "", err + } + switch markdownKnownResourceTokenKind(token) { + case "wiki": + return "", markdownValidationParamError("--folder-token", "--folder-token looks like a wiki node token"). + WithHint("Pass it with --wiki-token instead.") + case "doc", "docx", "sheet", "bitable", "mindnote", "slides", "file": + return "", markdownValidationParamError("--folder-token", "--folder-token must be a Drive folder token, not a %s token", markdownKnownResourceTokenKind(token)) + } + if err := validateMarkdownTargetTokenName(token, "--folder-token"); err != nil { + return "", err + } + return token, nil +} + +func normalizeMarkdownWikiToken(token string) (string, error) { + token = strings.TrimSpace(token) + if strings.Contains(token, "://") { + ref, ok := common.ParseResourceURL(token) + if !ok { + return "", markdownValidationParamError("--wiki-token", "--wiki-token URL is unsupported"). + WithHint("Pass a wiki node URL or raw wiki node token.") + } + if ref.Type != "wiki" { + return "", markdownValidationParamError("--wiki-token", + "--wiki-token must identify a wiki node; got a %s URL", + ref.Type, + ).WithHint("Resolve document URLs with `lark-cli wiki +node-get --node-token ` and use the returned node_token.") + } + if err := validateMarkdownTargetTokenName(ref.Token, "--wiki-token"); err != nil { + return "", err + } + return ref.Token, nil + } + if err := rejectMarkdownPartialToken(token, "--wiki-token"); err != nil { + return "", err + } + if kind := markdownKnownResourceTokenKind(token); kind != "" && kind != "wiki" { + return "", markdownValidationParamError("--wiki-token", "--wiki-token must be a wiki node token, not a %s token", kind) + } + if err := validateMarkdownTargetTokenName(token, "--wiki-token"); err != nil { + return "", err + } + return token, nil +} + +func rejectMarkdownPartialToken(token, flagName string) error { + if strings.ContainsAny(token, "/?#") { + return markdownValidationParamError(flagName, "%s must be a raw token, not a path, query, or fragment", flagName). + WithHint("Pass a full Lark URL, or copy only the token value without path/query/fragment characters.") + } + return nil +} + +func validateMarkdownTargetTokenName(token, flagName string) error { + if err := validate.ResourceName(token, flagName); err != nil { + return markdownValidationParamError(flagName, "%s", err).WithCause(err) + } + return nil +} + +func markdownKnownResourceTokenKind(token string) string { + lower := strings.ToLower(strings.TrimSpace(token)) + switch { + case strings.HasPrefix(lower, "wik"): + return "wiki" + case strings.HasPrefix(lower, "docx"): + return "docx" + case strings.HasPrefix(lower, "doc"): + return "doc" + case strings.HasPrefix(lower, "sht"): + return "sheet" + case strings.HasPrefix(lower, "bas"): + return "bitable" + case strings.HasPrefix(lower, "mn"): + return "mindnote" + case strings.HasPrefix(lower, "sld"): + return "slides" + case strings.HasPrefix(lower, "box"), strings.HasPrefix(lower, "file"): + return "file" + default: + return "" + } +} diff --git a/shortcuts/markdown/markdown_test.go b/shortcuts/markdown/markdown_test.go index 25a7687f2..a1a0c5f71 100644 --- a/shortcuts/markdown/markdown_test.go +++ b/shortcuts/markdown/markdown_test.go @@ -446,6 +446,173 @@ func TestMarkdownCreateDryRunWithWikiToken(t *testing.T) { } } +func TestMarkdownCreateDryRunNormalizesFolderURL(t *testing.T) { + f, stdout, _, _ := cmdutil.TestFactory(t, markdownTestConfig()) + + err := mountAndRunMarkdown(t, MarkdownCreate, []string{ + "+create", + "--name", "README.md", + "--content", "# hello", + "--folder-token", "https://feishu.cn/drive/folder/fldcnMarkdownTarget", + "--dry-run", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + out := stdout.String() + if !strings.Contains(out, `"parent_type": "explorer"`) { + t.Fatalf("dry-run missing explorer parent_type: %s", out) + } + if !strings.Contains(out, `"parent_node": "fldcnMarkdownTarget"`) { + t.Fatalf("dry-run did not normalize folder URL to token: %s", out) + } + if strings.Contains(out, "https://feishu.cn/drive/folder/") { + t.Fatalf("dry-run leaked raw folder URL instead of token: %s", out) + } +} + +func TestMarkdownCreateRejectsWikiURLInFolderToken(t *testing.T) { + f, stdout, _, _ := cmdutil.TestFactory(t, markdownTestConfig()) + + err := mountAndRunMarkdown(t, MarkdownCreate, []string{ + "+create", + "--name", "README.md", + "--content", "# hello", + "--folder-token", "https://feishu.cn/wiki/wikcnWrongFlag", + }, f, stdout) + if err == nil { + t.Fatalf("expected folder-token URL type error, got nil") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + if !strings.Contains(p.Message, "must identify a Drive folder") || !strings.Contains(p.Hint, "Use --wiki-token") { + t.Fatalf("expected folder-token URL type error, got %v", err) + } +} + +func TestMarkdownCreateRejectsDocURLInWikiToken(t *testing.T) { + f, stdout, _, _ := cmdutil.TestFactory(t, markdownTestConfig()) + + err := mountAndRunMarkdown(t, MarkdownCreate, []string{ + "+create", + "--name", "README.md", + "--content", "# hello", + "--wiki-token", "https://feishu.cn/docx/docxWrongFlag", + }, f, stdout) + if err == nil { + t.Fatalf("expected wiki-token URL type error, got nil") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + if !strings.Contains(p.Message, "must identify a wiki node") || !strings.Contains(p.Hint, "+node-get") { + t.Fatalf("expected wiki-token URL type error, got %v", err) + } +} + +func TestNormalizeMarkdownTargetTokensRejectAmbiguousInputs(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + run func() (string, error) + wantMsg string + wantHint string + }{ + { + name: "wiki token passed as folder token", + run: func() (string, error) { return normalizeMarkdownFolderToken("wik_placeholder_wrong") }, + wantMsg: "--folder-token looks like a wiki node token", + wantHint: "--wiki-token", + }, + { + name: "folder token path fragment", + run: func() (string, error) { return normalizeMarkdownFolderToken("folder_token/child") }, + wantMsg: "--folder-token must be a raw token", + wantHint: "full Lark URL", + }, + { + name: "doc token passed as wiki token", + run: func() (string, error) { return normalizeMarkdownWikiToken("docx_placeholder_wrong") }, + wantMsg: "--wiki-token must be a wiki node token", + wantHint: "", + }, + { + name: "wiki token query fragment", + run: func() (string, error) { return normalizeMarkdownWikiToken("wik_placeholder?from=copy") }, + wantMsg: "--wiki-token must be a raw token", + wantHint: "path/query/fragment", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := tt.run() + if err == nil { + t.Fatalf("expected validation error") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + if !strings.Contains(p.Message, tt.wantMsg) { + t.Fatalf("message = %q, want substring %q", p.Message, tt.wantMsg) + } + if tt.wantHint != "" && !strings.Contains(p.Hint, tt.wantHint) { + t.Fatalf("hint = %q, want substring %q", p.Hint, tt.wantHint) + } + }) + } +} + +func TestNormalizeMarkdownTargetTokensAcceptRawTokens(t *testing.T) { + t.Parallel() + + folderToken, err := normalizeMarkdownFolderToken("folder_token_raw") + if err != nil { + t.Fatalf("normalizeMarkdownFolderToken() error = %v", err) + } + if folderToken != "folder_token_raw" { + t.Fatalf("folder token = %q", folderToken) + } + + wikiToken, err := normalizeMarkdownWikiToken("wik_placeholder_raw") + if err != nil { + t.Fatalf("normalizeMarkdownWikiToken() error = %v", err) + } + if wikiToken != "wik_placeholder_raw" { + t.Fatalf("wiki token = %q", wikiToken) + } +} + +func TestMarkdownUploadProblemAddsQuotaAndServerHints(t *testing.T) { + t.Parallel() + + quotaErr := errs.NewAPIError(errs.SubtypeQuotaExceeded, "file quota exceeded").WithCode(1061101) + got := markdownUploadProblem(quotaErr, markdownUploadAllAction) + p, ok := errs.ProblemOf(got) + if !ok { + t.Fatalf("ProblemOf(quotaErr) ok=false") + } + if !strings.Contains(p.Hint, "storage quota is exhausted") { + t.Fatalf("quota hint = %q", p.Hint) + } + + serverErr := errs.NewAPIError(errs.SubtypeServerError, "NA").WithCode(233523001).WithRetryable() + got = markdownUploadProblem(serverErr, markdownUploadAllAction) + p, ok = errs.ProblemOf(got) + if !ok { + t.Fatalf("ProblemOf(serverErr) ok=false") + } + if !p.Retryable || !strings.Contains(p.Hint, "transient server error") { + t.Fatalf("server retryable=%v hint=%q", p.Retryable, p.Hint) + } +} + func TestMarkdownCreateDryRunReportsSourceFileError(t *testing.T) { f, stdout, _, _ := cmdutil.TestFactory(t, markdownTestConfig()) diff --git a/shortcuts/minutes/minutes_detail.go b/shortcuts/minutes/minutes_detail.go index 8a7f4f1aa..17afade0c 100644 --- a/shortcuts/minutes/minutes_detail.go +++ b/shortcuts/minutes/minutes_detail.go @@ -28,7 +28,12 @@ import ( const minutesDetailLogPrefix = "[minutes +detail]" // Error codes from the minutes API. -const minutesDetailNoReadPermissionCode = 2091005 +const ( + minutesDetailProcessingCode = 2091003 + minutesDetailNoReadPermissionCode = 2091005 + minutesDetailWaitTimeoutDefault = 300 + minutesDetailWaitIntervalDefault = 15 +) var validMinuteTokenDetail = regexp.MustCompile(`^[a-z0-9]+$`) @@ -40,19 +45,31 @@ var scopesDetailMinuteTokens = []string{ // minuteDetailItem represents a single minute detail result. type minuteDetailItem struct { MinuteToken string `json:"minute_token"` + Status string `json:"status,omitempty"` Title string `json:"title"` NoteID string `json:"note_id"` Artifacts map[string]any `json:"artifacts,omitempty"` + Retryable bool `json:"retryable,omitempty"` Error string `json:"error,omitempty"` + Hint string `json:"hint,omitempty"` + NextCommand string `json:"next_command,omitempty"` } // fetchMinuteDetail queries a single minute's metadata and selected artifacts. func fetchMinuteDetail(ctx context.Context, runtime *common.RuntimeContext, minuteToken string) *minuteDetailItem { - data, err := runtime.CallAPITyped(http.MethodGet, - fmt.Sprintf("/open-apis/minutes/v1/minutes/%s", validate.EncodePathSegment(minuteToken)), nil, nil) + artifactFlags := requestedMinutesDetailArtifactFlags(runtime) + waitReady := runtime.Bool("wait-ready") + waitTimeout, waitInterval := minutesDetailWaitConfig(runtime) + + data, err := callMinutesDetailAPIUntilReady(ctx, runtime, waitReady, waitTimeout, waitInterval, func() (map[string]interface{}, error) { + return runtime.CallAPITyped(http.MethodGet, + fmt.Sprintf("/open-apis/minutes/v1/minutes/%s", validate.EncodePathSegment(minuteToken)), nil, nil) + }) if err != nil { result := &minuteDetailItem{MinuteToken: minuteToken} - if p, ok := errs.ProblemOf(err); ok && p.Code == minutesDetailNoReadPermissionCode { + if isMinutesDetailProcessingError(err) { + markMinutesDetailProcessing(result, minuteToken, artifactFlags, "minute metadata is still being generated") + } else if p, ok := errs.ProblemOf(err); ok && p.Code == minutesDetailNoReadPermissionCode { result.Error = fmt.Sprintf("No read permission for minute %s. Ask the minute owner for minute file read permission", minuteToken) } else { result.Error = fmt.Sprintf("failed to query minute: %v", err) @@ -81,10 +98,16 @@ func fetchMinuteDetail(ctx context.Context, runtime *common.RuntimeContext, minu needKeyword := runtime.Bool("keyword") if needSummary || needTodo || needChapter || needTranscript || needKeyword { - artData, err := runtime.CallAPITyped(http.MethodGet, - fmt.Sprintf("/open-apis/minutes/v1/minutes/%s/artifacts", validate.EncodePathSegment(minuteToken)), nil, nil) + artData, err := callMinutesDetailAPIUntilReady(ctx, runtime, waitReady, waitTimeout, waitInterval, func() (map[string]interface{}, error) { + return runtime.CallAPITyped(http.MethodGet, + fmt.Sprintf("/open-apis/minutes/v1/minutes/%s/artifacts", validate.EncodePathSegment(minuteToken)), nil, nil) + }) if err != nil { - fmt.Fprintf(runtime.IO().ErrOut, "%s failed to fetch artifacts for %s: %v\n", minutesDetailLogPrefix, minuteToken, err) + if isMinutesDetailProcessingError(err) { + markMinutesDetailProcessing(result, minuteToken, artifactFlags, "minute artifacts are still being generated") + } else { + result.Error = fmt.Sprintf("failed to query minute artifacts: %v", err) + } } else { artifacts := make(map[string]any) if needSummary { @@ -133,6 +156,78 @@ func fetchMinuteDetail(ctx context.Context, runtime *common.RuntimeContext, minu return result } +func isMinutesDetailProcessingError(err error) bool { + if p, ok := errs.ProblemOf(err); ok && p.Code == minutesDetailProcessingCode { + return true + } + return false +} + +func minutesDetailWaitConfig(runtime *common.RuntimeContext) (time.Duration, time.Duration) { + timeoutSeconds, intervalSeconds := normalizeMinutesDetailWaitSeconds(runtime.Int("wait-timeout-seconds"), runtime.Int("wait-interval-seconds")) + return time.Duration(timeoutSeconds) * time.Second, time.Duration(intervalSeconds) * time.Second +} + +func normalizeMinutesDetailWaitSeconds(timeoutSeconds, intervalSeconds int) (int, int) { + if timeoutSeconds <= 0 { + timeoutSeconds = minutesDetailWaitTimeoutDefault + } + if intervalSeconds <= 0 { + intervalSeconds = minutesDetailWaitIntervalDefault + } + return timeoutSeconds, intervalSeconds +} + +func callMinutesDetailAPIUntilReady(ctx context.Context, runtime *common.RuntimeContext, waitReady bool, timeout, interval time.Duration, call func() (map[string]interface{}, error)) (map[string]interface{}, error) { + deadline := time.Now().Add(timeout) + for { + data, err := call() + if err == nil || !waitReady || !isMinutesDetailProcessingError(err) { + return data, err + } + if ctxErr := ctx.Err(); ctxErr != nil { + return nil, ctxErr + } + remaining := time.Until(deadline) + if remaining <= 0 || interval > remaining { + return nil, err + } + fmt.Fprintf(runtime.IO().ErrOut, "%s minute is still processing; retrying in %s\n", minutesDetailLogPrefix, interval) + timer := time.NewTimer(interval) + select { + case <-ctx.Done(): + timer.Stop() + return nil, ctx.Err() + case <-timer.C: + } + } +} + +func requestedMinutesDetailArtifactFlags(runtime *common.RuntimeContext) []string { + var flags []string + for _, flag := range []string{"summary", "todo", "chapter", "keyword", "transcript"} { + if runtime.Bool(flag) { + flags = append(flags, "--"+flag) + } + } + return flags +} + +func markMinutesDetailProcessing(result *minuteDetailItem, minuteToken string, artifactFlags []string, reason string) { + result.Status = "processing" + result.Retryable = true + result.Error = reason + result.Hint = "The minute is still being generated. Retry later, or rerun the next_command to wait until it is ready." + result.NextCommand = minutesDetailNextCommand(minuteToken, artifactFlags) +} + +func minutesDetailNextCommand(minuteToken string, artifactFlags []string) string { + parts := []string{"lark-cli", "minutes", "+detail", "--minute-tokens", minuteToken} + parts = append(parts, artifactFlags...) + parts = append(parts, "--wait-ready") + return strings.Join(parts, " ") +} + // saveDetailTranscript persists transcript bytes to the canonical artifact path. // With --output-dir, transcripts land under /artifact--<token>/ // to mirror the legacy `vc +notes` layout. Otherwise falls back to the default @@ -201,6 +296,9 @@ var MinutesDetail = common.Shortcut{ {Name: "keyword", Type: "bool", Desc: "include keywords"}, {Name: "output-dir", Desc: "output directory for transcript files (default: ./minutes/{minute_token}/)"}, {Name: "overwrite", Type: "bool", Desc: "overwrite existing transcript files"}, + {Name: "wait-ready", Type: "bool", Desc: "wait until minute metadata/artifacts are ready", Hidden: true}, + {Name: "wait-timeout-seconds", Type: "int", Default: "300", Desc: "maximum seconds to wait for readiness", Hidden: true}, + {Name: "wait-interval-seconds", Type: "int", Default: "15", Desc: "seconds between readiness checks", Hidden: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { tokens := common.SplitCSV(runtime.Str("minute-tokens")) @@ -282,8 +380,15 @@ var MinutesDetail = common.Shortcut{ for _, r := range results { row := map[string]interface{}{"minute_token": r.MinuteToken} if r.Error != "" { - row["status"] = "FAIL" + if r.Status == "processing" { + row["status"] = "PROCESSING" + } else { + row["status"] = "FAIL" + } row["error"] = r.Error + if r.NextCommand != "" { + row["next_command"] = r.NextCommand + } } else { row["status"] = "OK" row["title"] = r.Title diff --git a/shortcuts/minutes/minutes_detail_test.go b/shortcuts/minutes/minutes_detail_test.go index b5c8f46d8..fdf1e3dad 100644 --- a/shortcuts/minutes/minutes_detail_test.go +++ b/shortcuts/minutes/minutes_detail_test.go @@ -9,6 +9,7 @@ import ( "encoding/json" "errors" "fmt" + "net/http" "os" "strings" "sync" @@ -108,6 +109,17 @@ func detailArtifactsStub(token, transcript string) *httpmock.Stub { } } +func detailProcessingStub(path string) *httpmock.Stub { + return &httpmock.Stub{ + Method: "GET", + URL: path, + Body: map[string]interface{}{ + "code": 2091003, + "msg": "minute is processing", + }, + } +} + func TestDetail_Validation_MissingMinuteTokens(t *testing.T) { f, _, _, _ := cmdutil.TestFactory(t, defaultConfig()) err := detailMountAndRun(t, MinutesDetail, []string{"+detail", "--as", "user"}, f, nil) @@ -172,6 +184,34 @@ func TestDetail_DryRun_WithArtifactFlags(t *testing.T) { } } +func TestDetail_HiddenWaitFlags(t *testing.T) { + f, stdout, _, _ := cmdutil.TestFactory(t, defaultConfig()) + parent := &cobra.Command{Use: "minutes"} + MinutesDetail.Mount(parent, f) + parent.SetOut(stdout) + parent.SetArgs([]string{"+detail", "--help"}) + parent.SilenceErrors = true + parent.SilenceUsage = true + if err := parent.Execute(); err != nil { + t.Fatalf("help failed: %v", err) + } + help := stdout.String() + for _, hidden := range []string{"wait-ready", "wait-timeout-seconds", "wait-interval-seconds"} { + if strings.Contains(help, hidden) { + t.Fatalf("hidden flag %q should not appear in help:\n%s", hidden, help) + } + } + + stdout.Reset() + err := detailMountAndRun(t, MinutesDetail, []string{ + "+detail", "--minute-tokens", "tok001", "--summary", "--wait-ready", + "--wait-timeout-seconds", "0", "--wait-interval-seconds", "0", "--dry-run", "--as", "user", + }, f, stdout) + if err != nil { + t.Fatalf("hidden wait flags should parse: %v", err) + } +} + // --------------------------------------------------------------------------- // Execute tests with mocked HTTP // --------------------------------------------------------------------------- @@ -355,6 +395,136 @@ func TestDetail_Execute_MinuteNotFound(t *testing.T) { } } +func TestDetail_Execute_MetadataProcessing(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + reg.Register(detailProcessingStub("/open-apis/minutes/v1/minutes/tokpending")) + + err := detailMountAndRun(t, MinutesDetail, []string{"+detail", "--minute-tokens", "tokpending", "--summary", "--as", "user"}, f, stdout) + if err == nil { + t.Fatal("expected partial failure error") + } + var pfErr *output.PartialFailureError + if !errors.As(err, &pfErr) { + t.Fatalf("expected *output.PartialFailureError, got %T: %v", err, err) + } + m := firstDetailMinute(t, stdout.Bytes()) + if m["status"] != "processing" { + t.Fatalf("status = %v, want processing", m["status"]) + } + if m["retryable"] != true { + t.Fatalf("retryable = %v, want true", m["retryable"]) + } + if !strings.Contains(fmt.Sprint(m["next_command"]), "minutes +detail --minute-tokens tokpending --summary --wait-ready") { + t.Fatalf("next_command = %v", m["next_command"]) + } +} + +func TestDetail_Execute_ArtifactsProcessing(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + reg.Register(detailMinuteGetStub("tokartpending", "note_pending", "Pending Artifacts")) + reg.Register(detailProcessingStub("/open-apis/minutes/v1/minutes/tokartpending/artifacts")) + + err := detailMountAndRun(t, MinutesDetail, []string{"+detail", "--minute-tokens", "tokartpending", "--summary", "--todo", "--as", "user"}, f, stdout) + if err == nil { + t.Fatal("expected partial failure error") + } + m := firstDetailMinute(t, stdout.Bytes()) + if m["status"] != "processing" { + t.Fatalf("status = %v, want processing", m["status"]) + } + if m["title"] != "Pending Artifacts" || m["note_id"] != "note_pending" { + t.Fatalf("metadata should be preserved on artifacts processing, got title=%v note_id=%v", m["title"], m["note_id"]) + } + if !strings.Contains(fmt.Sprint(m["next_command"]), "--summary --todo --wait-ready") { + t.Fatalf("next_command = %v", m["next_command"]) + } +} + +func TestDetail_WaitReady_MetadataEventuallyReady(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + reg.Register(detailProcessingStub("/open-apis/minutes/v1/minutes/tokwaitmeta")) + reg.Register(detailMinuteGetStub("tokwaitmeta", "", "Ready Metadata")) + + err := detailMountAndRun(t, MinutesDetail, []string{ + "+detail", "--minute-tokens", "tokwaitmeta", "--wait-ready", + "--wait-timeout-seconds", "5", "--wait-interval-seconds", "1", "--as", "user", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + m := firstDetailMinute(t, stdout.Bytes()) + if m["title"] != "Ready Metadata" { + t.Fatalf("title = %v, want Ready Metadata", m["title"]) + } + if _, ok := m["artifacts"]; ok { + t.Fatal("artifacts should not be fetched without artifact flags") + } +} + +func TestDetail_WaitReady_ArtifactsEventuallyReady(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + reg.Register(detailMinuteGetStub("tokwaitart", "note_wait", "Ready Artifacts")) + reg.Register(detailProcessingStub("/open-apis/minutes/v1/minutes/tokwaitart/artifacts")) + reg.Register(detailArtifactsStub("tokwaitart", "")) + + err := detailMountAndRun(t, MinutesDetail, []string{ + "+detail", "--minute-tokens", "tokwaitart", "--summary", "--wait-ready", + "--wait-timeout-seconds", "5", "--wait-interval-seconds", "1", "--as", "user", + }, f, stdout) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + m := firstDetailMinute(t, stdout.Bytes()) + arts, _ := m["artifacts"].(map[string]any) + if arts == nil { + t.Fatal("expected artifacts") + } + if arts["summary"] != "Test summary content" { + t.Fatalf("summary = %v", arts["summary"]) + } +} + +func TestDetail_WaitReady_TimeoutUsesProcessingResult(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + reg.Register(detailMinuteGetStub("toktimeout", "note_timeout", "Timeout Artifacts")) + reg.Register(detailProcessingStub("/open-apis/minutes/v1/minutes/toktimeout/artifacts")) + + err := detailMountAndRun(t, MinutesDetail, []string{ + "+detail", "--minute-tokens", "toktimeout", "--summary", "--wait-ready", + "--wait-timeout-seconds", "1", "--wait-interval-seconds", "2", "--as", "user", + }, f, stdout) + if err == nil { + t.Fatal("expected partial failure error") + } + m := firstDetailMinute(t, stdout.Bytes()) + if m["status"] != "processing" || m["title"] != "Timeout Artifacts" || m["note_id"] != "note_timeout" { + t.Fatalf("timeout should preserve processing status and metadata, got %+v", m) + } +} + +func TestDetail_WaitReady_DoesNotPollNonProcessingErrors(t *testing.T) { + f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) + var callCount int + reg.Register(&httpmock.Stub{ + Method: "GET", + URL: "/open-apis/minutes/v1/minutes/tokmissing", + Body: map[string]interface{}{"code": 2091004, "msg": "not found"}, + Reusable: true, + OnMatch: func(req *http.Request) { callCount++ }, + }) + + err := detailMountAndRun(t, MinutesDetail, []string{ + "+detail", "--minute-tokens", "tokmissing", "--wait-ready", + "--wait-timeout-seconds", "5", "--wait-interval-seconds", "1", "--as", "user", + }, f, stdout) + if err == nil { + t.Fatal("expected partial failure error") + } + if callCount != 1 { + t.Fatalf("non-processing error should not be retried, callCount=%d", callCount) + } +} + // --------------------------------------------------------------------------- // Pure function tests // --------------------------------------------------------------------------- @@ -378,6 +548,36 @@ func TestValidMinuteTokenDetail(t *testing.T) { } } +func TestNormalizeMinutesDetailWaitSeconds(t *testing.T) { + timeout, interval := normalizeMinutesDetailWaitSeconds(0, 0) + if timeout != minutesDetailWaitTimeoutDefault || interval != minutesDetailWaitIntervalDefault { + t.Fatalf("normalize(0,0) = (%d,%d), want defaults (%d,%d)", timeout, interval, minutesDetailWaitTimeoutDefault, minutesDetailWaitIntervalDefault) + } + timeout, interval = normalizeMinutesDetailWaitSeconds(-1, -2) + if timeout != minutesDetailWaitTimeoutDefault || interval != minutesDetailWaitIntervalDefault { + t.Fatalf("normalize(negative) = (%d,%d), want defaults", timeout, interval) + } + timeout, interval = normalizeMinutesDetailWaitSeconds(9, 3) + if timeout != 9 || interval != 3 { + t.Fatalf("normalize(9,3) = (%d,%d)", timeout, interval) + } +} + +func firstDetailMinute(t *testing.T, raw []byte) map[string]any { + t.Helper() + var resp map[string]any + if err := json.Unmarshal(raw, &resp); err != nil { + t.Fatalf("failed to parse output: %v\n%s", err, string(raw)) + } + data, _ := resp["data"].(map[string]any) + minutes, _ := data["minutes"].([]any) + if len(minutes) != 1 { + t.Fatalf("expected 1 minute, got %d in %s", len(minutes), string(raw)) + } + m, _ := minutes[0].(map[string]any) + return m +} + // chdirForDetailTest switches cwd to a temp dir for the test. func chdirForDetailTest(t *testing.T) string { t.Helper() diff --git a/shortcuts/minutes/minutes_speaker_replace.go b/shortcuts/minutes/minutes_speaker_replace.go index 716230d3e..a92676f10 100644 --- a/shortcuts/minutes/minutes_speaker_replace.go +++ b/shortcuts/minutes/minutes_speaker_replace.go @@ -66,31 +66,24 @@ var MinutesSpeakerReplace = common.Shortcut{ }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { minuteToken := strings.TrimSpace(runtime.Str("minute-token")) - dr := common.NewDryRunAPI() - if strings.TrimSpace(runtime.Str("from-speaker-id")) != "" && strings.TrimSpace(runtime.Str("from-user-id")) == "" { - dr.GET(minuteTranscriptSpeakerlistPath(minuteToken)).Desc("Resolve --from-speaker-id when it is a display name") - } - return dr.PUT(fmt.Sprintf("/open-apis/minutes/v1/minutes/%s/transcript/speaker", validate.EncodePathSegment(minuteToken))). + return common.NewDryRunAPI(). + PUT(fmt.Sprintf("/open-apis/minutes/v1/minutes/%s/transcript/speaker", validate.EncodePathSegment(minuteToken))). Body(buildSpeakerReplaceRequestBody(runtime)) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { minuteToken := strings.TrimSpace(runtime.Str("minute-token")) - fromSpeakerInput := strings.TrimSpace(runtime.Str("from-speaker-id")) + fromSpeakerID := strings.TrimSpace(runtime.Str("from-speaker-id")) + fromUserID := strings.TrimSpace(runtime.Str("from-user-id")) toUserID := strings.TrimSpace(runtime.Str("to-user-id")) - fromSpeakerID, fromUserID, err := resolveSpeakerReplaceFrom(runtime, minuteToken) - if err != nil { - return err - } - - _, err = runtime.CallAPITyped(http.MethodPut, + _, err := runtime.CallAPITyped(http.MethodPut, fmt.Sprintf("/open-apis/minutes/v1/minutes/%s/transcript/speaker", validate.EncodePathSegment(minuteToken)), map[string]interface{}{"user_id_type": "open_id"}, buildSpeakerReplaceRequestBodyResolved(fromSpeakerID, fromUserID, toUserID)) if err != nil { - return minutesSpeakerReplaceError(err, minuteToken, speakerReplaceSourceLabel(fromSpeakerInput, fromSpeakerID, fromUserID)) + return minutesSpeakerReplaceError(err, minuteToken, speakerReplaceSourceLabel(fromSpeakerID, fromUserID)) } - runtime.OutFormat(buildSpeakerReplaceOutputData(fromSpeakerInput, minuteToken, fromSpeakerID, fromUserID, toUserID), nil, nil) + runtime.OutFormat(buildSpeakerReplaceOutputData(minuteToken, fromSpeakerID, fromUserID, toUserID), nil, nil) return nil }, } @@ -114,26 +107,20 @@ func buildSpeakerReplaceRequestBodyResolved(fromSpeakerID, fromUserID, toUserID return body } -func buildSpeakerReplaceOutputData(fromSpeakerInput, minuteToken, fromSpeakerID, fromUserID, toUserID string) map[string]interface{} { +func buildSpeakerReplaceOutputData(minuteToken, fromSpeakerID, fromUserID, toUserID string) map[string]interface{} { out := map[string]interface{}{ "minute_token": minuteToken, "to_user_id": toUserID, } if fromSpeakerID != "" { out["from_speaker_id"] = fromSpeakerID - if fromSpeakerInput != "" && fromSpeakerInput != fromSpeakerID { - out["from_speaker_input"] = fromSpeakerInput - } } else { out["from_user_id"] = fromUserID } return out } -func speakerReplaceSourceLabel(fromSpeakerInput, fromSpeakerID, fromUserID string) string { - if fromSpeakerInput != "" { - return fromSpeakerInput - } +func speakerReplaceSourceLabel(fromSpeakerID, fromUserID string) string { if fromSpeakerID != "" { return fromSpeakerID } diff --git a/shortcuts/minutes/minutes_speaker_replace_test.go b/shortcuts/minutes/minutes_speaker_replace_test.go index 5b028a249..193331f55 100644 --- a/shortcuts/minutes/minutes_speaker_replace_test.go +++ b/shortcuts/minutes/minutes_speaker_replace_test.go @@ -153,58 +153,14 @@ func TestMinutesSpeakerReplace_DryRun(t *testing.T) { } } -func TestMinutesSpeakerReplace_DryRun_ResolveFromSpeakerID(t *testing.T) { - t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) - f, stdout, _, _ := cmdutil.TestFactory(t, defaultConfig()) - warmTokenCache(t) - - err := mountAndRun(t, MinutesSpeakerReplace, []string{ - "+speaker-replace", - "--minute-token", minutesSpeakerReplaceTestToken, - "--from-speaker-id", "说话人1", - "--to-user-id", "ou_new_speaker", - "--dry-run", "--as", "user", - }, f, stdout) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - - out := stdout.String() - if !strings.Contains(out, "GET") { - t.Errorf("expected GET for internal speaker list, got:\n%s", out) - } - if !strings.Contains(out, "/transcript/speakerlist") { - t.Errorf("expected speakerlist path, got:\n%s", out) - } - if !strings.Contains(out, "PUT") { - t.Errorf("expected PUT for speaker replace, got:\n%s", out) - } - if !strings.Contains(out, "ou_new_speaker") { - t.Errorf("expected to_user_id in body, got:\n%s", out) - } -} - -func TestMinutesSpeakerReplace_Execute_ResolveFromSpeakerID(t *testing.T) { +func TestMinutesSpeakerReplace_Execute_OpaqueSpeakerIDNoPrefetch(t *testing.T) { t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) f, stdout, _, reg := cmdutil.TestFactory(t, defaultConfig()) warmTokenCache(t) - reg.Register(&httpmock.Stub{ - Method: http.MethodGet, - URL: "/open-apis/minutes/v1/minutes/" + minutesSpeakerReplaceTestToken + "/transcript/speakerlist", - Body: map[string]interface{}{ - "code": 0, - "msg": "ok", - "data": map[string]interface{}{ - "speakers": []interface{}{ - map[string]interface{}{ - "speaker_id": "ENCRYPTED_TOKEN_ABC", - "name": "说话人1", - }, - }, - }, - }, - }) + // Only the PUT is registered on purpose: an opaque speaker_id must be passed + // straight through without a second speakerlist call. If the code still + // prefetched speakerlist, the unregistered GET would fail the request. reg.Register(&httpmock.Stub{ Method: http.MethodPut, URL: "/open-apis/minutes/v1/minutes/" + minutesSpeakerReplaceTestToken + "/transcript/speaker", @@ -218,7 +174,7 @@ func TestMinutesSpeakerReplace_Execute_ResolveFromSpeakerID(t *testing.T) { err := mountAndRun(t, MinutesSpeakerReplace, []string{ "+speaker-replace", "--minute-token", minutesSpeakerReplaceTestToken, - "--from-speaker-id", "说话人1", + "--from-speaker-id", "ENCRYPTED_TOKEN_ABC", "--to-user-id", "ou_new_speaker", "--format", "json", "--as", "user", }, f, stdout) @@ -228,21 +184,19 @@ func TestMinutesSpeakerReplace_Execute_ResolveFromSpeakerID(t *testing.T) { var envelope struct { Data struct { - MinuteToken string `json:"minute_token"` - FromSpeakerInput string `json:"from_speaker_input"` - FromSpeakerID string `json:"from_speaker_id"` - ToUserID string `json:"to_user_id"` + FromSpeakerID string `json:"from_speaker_id"` + ToUserID string `json:"to_user_id"` } `json:"data"` } if err := json.Unmarshal(stdout.Bytes(), &envelope); err != nil { t.Fatalf("unmarshal stdout: %v", err) } - if envelope.Data.FromSpeakerInput != "说话人1" { - t.Errorf("data.from_speaker_input = %q, want 说话人1", envelope.Data.FromSpeakerInput) - } if envelope.Data.FromSpeakerID != "ENCRYPTED_TOKEN_ABC" { t.Errorf("data.from_speaker_id = %q, want ENCRYPTED_TOKEN_ABC", envelope.Data.FromSpeakerID) } + if envelope.Data.ToUserID != "ou_new_speaker" { + t.Errorf("data.to_user_id = %q, want ou_new_speaker", envelope.Data.ToUserID) + } } func TestMinutesSpeakerReplace_DryRun_FromSpeakerID(t *testing.T) { @@ -262,8 +216,11 @@ func TestMinutesSpeakerReplace_DryRun_FromSpeakerID(t *testing.T) { } out := stdout.String() - if !strings.Contains(out, "GET") { - t.Errorf("expected GET for internal speaker list, got:\n%s", out) + if strings.Contains(out, "/transcript/speakerlist") { + t.Errorf("opaque speaker_id should not prefetch speakerlist, got:\n%s", out) + } + if !strings.Contains(out, "PUT") { + t.Errorf("expected PUT for speaker replace, got:\n%s", out) } if !strings.Contains(out, "from_speaker_id") || !strings.Contains(out, "ENCRYPTED_TOKEN_ABC") { t.Errorf("expected from_speaker_id in body, got:\n%s", out) diff --git a/shortcuts/minutes/minutes_speakers.go b/shortcuts/minutes/minutes_speakers.go deleted file mode 100644 index b9649f6d1..000000000 --- a/shortcuts/minutes/minutes_speakers.go +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2026 Lark Technologies Pte. Ltd. -// SPDX-License-Identifier: MIT - -package minutes - -import ( - "fmt" - "net/http" - "strings" - - "github.com/larksuite/cli/errs" - "github.com/larksuite/cli/internal/validate" - "github.com/larksuite/cli/shortcuts/common" -) - -type minuteSpeaker struct { - SpeakerID string - Name string -} - -func minuteTranscriptSpeakerlistPath(minuteToken string) string { - return fmt.Sprintf("/open-apis/minutes/v1/minutes/%s/transcript/speakerlist", validate.EncodePathSegment(minuteToken)) -} - -func fetchMinuteSpeakers(runtime *common.RuntimeContext, minuteToken string) ([]minuteSpeaker, error) { - data, err := runtime.CallAPITyped(http.MethodGet, minuteTranscriptSpeakerlistPath(minuteToken), nil, nil) - if err != nil { - return nil, err - } - if data == nil { - return nil, nil - } - - items := common.GetSlice(data, "speakers") - speakers := make([]minuteSpeaker, 0, len(items)) - for _, raw := range items { - item, _ := raw.(map[string]interface{}) - if item == nil { - continue - } - id := strings.TrimSpace(common.GetString(item, "speaker_id")) - name := strings.TrimSpace(common.GetString(item, "name")) - if id == "" { - continue - } - speakers = append(speakers, minuteSpeaker{SpeakerID: id, Name: name}) - } - return speakers, nil -} - -func resolveSpeakerIDByName(speakers []minuteSpeaker, name string) (string, error) { - name = strings.TrimSpace(name) - var matches []minuteSpeaker - for _, s := range speakers { - if s.Name == name { - matches = append(matches, s) - } - } - switch len(matches) { - case 0: - return "", errs.NewValidationError(errs.SubtypeNotFound, - "no speaker named %q in minute transcript", name). - WithParam("--from-speaker-id"). - WithHint("Check the speaker name spelling or open the minute to see transcript speaker labels") - case 1: - return matches[0].SpeakerID, nil - default: - ids := make([]string, len(matches)) - for i, m := range matches { - ids[i] = m.SpeakerID - } - return "", errs.NewValidationError(errs.SubtypeFailedPrecondition, - "multiple speakers named %q (%d matches); pass the exact --from-speaker-id", name, len(matches)). - WithParam("--from-speaker-id"). - WithHint(fmt.Sprintf("Matching speaker_ids: %s. Review each speaker's utterances in the minute, then retry with the exact speaker_id", strings.Join(ids, ", "))) - } -} - -// resolveFromSpeakerID resolves --from-speaker-id to an API speaker_id. -// The input may already be an opaque speaker_id, or a display name that requires -// an internal speaker-list fetch. -func resolveFromSpeakerID(runtime *common.RuntimeContext, minuteToken, input string) (string, error) { - input = strings.TrimSpace(input) - speakers, err := fetchMinuteSpeakers(runtime, minuteToken) - if err != nil { - return "", err - } - for _, s := range speakers { - if s.SpeakerID == input { - return input, nil - } - } - return resolveSpeakerIDByName(speakers, input) -} - -func resolveSpeakerReplaceFrom(runtime *common.RuntimeContext, minuteToken string) (fromSpeakerID, fromUserID string, err error) { - fromUserID = strings.TrimSpace(runtime.Str("from-user-id")) - if fromUserID != "" { - return "", fromUserID, nil - } - - fromSpeakerID, err = resolveFromSpeakerID(runtime, minuteToken, runtime.Str("from-speaker-id")) - return fromSpeakerID, "", err -} diff --git a/shortcuts/minutes/minutes_speakers_test.go b/shortcuts/minutes/minutes_speakers_test.go deleted file mode 100644 index 015a362c1..000000000 --- a/shortcuts/minutes/minutes_speakers_test.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2026 Lark Technologies Pte. Ltd. -// SPDX-License-Identifier: MIT - -package minutes - -import ( - "errors" - "strings" - "testing" - - "github.com/larksuite/cli/errs" -) - -func TestResolveSpeakerIDByName(t *testing.T) { - speakers := []minuteSpeaker{ - {SpeakerID: "id_a", Name: "Alice"}, - {SpeakerID: "id_b", Name: "Bob"}, - {SpeakerID: "id_c", Name: "Alice"}, - } - - id, err := resolveSpeakerIDByName(speakers, "Bob") - if err != nil || id != "id_b" { - t.Fatalf("resolve Bob: id=%q err=%v", id, err) - } - - _, err = resolveSpeakerIDByName(speakers, "Carol") - if err == nil { - t.Fatal("expected not found error") - } - var ve *errs.ValidationError - if !errors.As(err, &ve) || ve.Subtype != errs.SubtypeNotFound { - t.Fatalf("want not-found validation error, got %T: %v", err, err) - } - - _, err = resolveSpeakerIDByName(speakers, "Alice") - if err == nil { - t.Fatal("expected duplicate name error") - } - if !errors.As(err, &ve) || ve.Subtype != errs.SubtypeFailedPrecondition { - t.Fatalf("want failed-precondition validation error, got %T: %v", err, err) - } - if !strings.Contains(ve.Hint, "id_a") || !strings.Contains(ve.Hint, "id_c") { - t.Errorf("hint should list matching speaker_ids, got: %s", ve.Hint) - } -} diff --git a/shortcuts/minutes/minutes_upload.go b/shortcuts/minutes/minutes_upload.go index 0f2f1f288..8911e82c5 100644 --- a/shortcuts/minutes/minutes_upload.go +++ b/shortcuts/minutes/minutes_upload.go @@ -5,6 +5,8 @@ package minutes import ( "context" + "net/url" + "strings" "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/validate" @@ -65,8 +67,25 @@ var MinutesUpload = common.Shortcut{ outData := map[string]interface{}{ "minute_url": minuteURL, } + if minuteToken := extractUploadedMinuteToken(minuteURL); minuteToken != "" { + outData["minute_token"] = minuteToken + } runtime.OutFormat(outData, nil, nil) return nil }, } + +func extractUploadedMinuteToken(minuteURL string) string { + u, err := url.Parse(minuteURL) + if err != nil { + return "" + } + parts := strings.Split(strings.TrimRight(u.Path, "/"), "/") + for i, part := range parts { + if part == "minutes" && i+1 < len(parts) { + return parts[i+1] + } + } + return "" +} diff --git a/shortcuts/minutes/minutes_upload_test.go b/shortcuts/minutes/minutes_upload_test.go index 26f661828..f7d62306f 100644 --- a/shortcuts/minutes/minutes_upload_test.go +++ b/shortcuts/minutes/minutes_upload_test.go @@ -143,4 +143,28 @@ func TestMinutesUpload_Execute(t *testing.T) { if dataMap["minute_url"] != "https://sample.feishu.cn/minutes/obcnq3b9jl72l83w4f149w9c" { t.Errorf("expected minute_url https://sample.feishu.cn/minutes/obcnq3b9jl72l83w4f149w9c, got %v", dataMap["minute_url"]) } + if dataMap["minute_token"] != "obcnq3b9jl72l83w4f149w9c" { + t.Errorf("expected minute_token obcnq3b9jl72l83w4f149w9c, got %v", dataMap["minute_token"]) + } +} + +func TestExtractUploadedMinuteToken(t *testing.T) { + tests := []struct { + name string + url string + want string + }{ + {name: "standard", url: "https://sample.feishu.cn/minutes/obcnq3b9jl72l83w4f149w9c", want: "obcnq3b9jl72l83w4f149w9c"}, + {name: "query", url: "https://sample.feishu.cn/minutes/obcn123?from=upload", want: "obcn123"}, + {name: "trailing slash", url: "https://sample.feishu.cn/minutes/obcn123/", want: "obcn123"}, + {name: "invalid", url: "://bad", want: ""}, + {name: "no minutes path", url: "https://sample.feishu.cn/docx/abc", want: ""}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := extractUploadedMinuteToken(tt.url); got != tt.want { + t.Fatalf("extractUploadedMinuteToken(%q) = %q, want %q", tt.url, got, tt.want) + } + }) + } } diff --git a/shortcuts/okr/okr_batch_create.go b/shortcuts/okr/okr_batch_create.go index ff5fc1f0f..61df08632 100644 --- a/shortcuts/okr/okr_batch_create.go +++ b/shortcuts/okr/okr_batch_create.go @@ -58,45 +58,9 @@ func parseBatchCreateInput(input string) ([]batchCreateObjective, error) { return objectives, nil } -// buildContentBlock converts text and mentions to a ContentBlock. -func buildContentBlock(text string, mentions []string) *ContentBlock { - elements := make([]ContentParagraphElement, 0, len(mentions)+1) - - // Add text element - textElem := ContentParagraphElement{ - ParagraphElementType: ParagraphElementTypeTextRun.Ptr(), - TextRun: &ContentTextRun{ - Text: &text, - }, - } - elements = append(elements, textElem) - - // Add mention elements - for _, mention := range mentions { - mentionElem := ContentParagraphElement{ - ParagraphElementType: ParagraphElementTypeMention.Ptr(), - Mention: &ContentMention{ - UserID: &mention, - }, - } - elements = append(elements, mentionElem) - } - - return &ContentBlock{ - Blocks: []ContentBlockElement{ - { - BlockElementType: BlockElementTypeParagraph.Ptr(), - Paragraph: &ContentParagraph{ - Elements: elements, - }, - }, - }, - } -} - // createObjective calls the API to create an objective. func createObjective(ctx context.Context, runtime *common.RuntimeContext, cycleID, userIDType string, obj batchCreateObjective) (string, error) { - content := buildContentBlock(obj.Text, obj.Mention) + content := BuildContentBlock(obj.Text, obj.Mention) body := map[string]interface{}{ "content": content, } @@ -120,7 +84,7 @@ func createObjective(ctx context.Context, runtime *common.RuntimeContext, cycleI // createKR calls the API to create a key result. func createKR(ctx context.Context, runtime *common.RuntimeContext, objectiveID, userIDType string, kr batchCreateKR) (string, error) { - content := buildContentBlock(kr.Text, kr.Mention) + content := BuildContentBlock(kr.Text, kr.Mention) body := map[string]interface{}{ "content": content, } @@ -224,7 +188,7 @@ var OKRBatchCreate = common.Shortcut{ for i, obj := range objectives { // Objective creation - objContent := buildContentBlock(obj.Text, obj.Mention) + objContent := BuildContentBlock(obj.Text, obj.Mention) objBody := map[string]interface{}{ "content": objContent, } @@ -241,7 +205,7 @@ var OKRBatchCreate = common.Shortcut{ // KR creations for j, kr := range obj.KRs { - krContent := buildContentBlock(kr.Text, kr.Mention) + krContent := BuildContentBlock(kr.Text, kr.Mention) krBody := map[string]interface{}{ "content": krContent, } diff --git a/shortcuts/okr/okr_batch_create_test.go b/shortcuts/okr/okr_batch_create_test.go index 809ee9d39..3efa2e0ca 100644 --- a/shortcuts/okr/okr_batch_create_test.go +++ b/shortcuts/okr/okr_batch_create_test.go @@ -557,7 +557,7 @@ func TestParseBatchCreateInput_Valid(t *testing.T) { func TestBuildContentBlock(t *testing.T) { t.Parallel() - cb := buildContentBlock("Test text", []string{"ou_123", "ou_456"}) + cb := BuildContentBlock("Test text", []string{"ou_123", "ou_456"}) if cb == nil { t.Fatal("expected non-nil ContentBlock") } diff --git a/shortcuts/okr/okr_cli_resp.go b/shortcuts/okr/okr_cli_resp.go index dc45a58de..1b0263806 100644 --- a/shortcuts/okr/okr_cli_resp.go +++ b/shortcuts/okr/okr_cli_resp.go @@ -29,15 +29,10 @@ type RespCategory struct { // RespCycle 周期 type RespCycle struct { - ID string `json:"id"` - CreateTime string `json:"create_time"` - UpdateTime string `json:"update_time"` - TenantCycleID string `json:"tenant_cycle_id"` - Owner RespOwner `json:"owner"` - StartTime string `json:"start_time"` - EndTime string `json:"end_time"` - CycleStatus *string `json:"cycle_status,omitempty"` - Score *float64 `json:"score,omitempty"` + ID string `json:"id"` + StartTime string `json:"start_time"` + EndTime string `json:"end_time"` + CycleStatus *string `json:"cycle_status,omitempty"` } // RespIndicator 指标 @@ -152,3 +147,145 @@ type RespProgress struct { Content *string `json:"content,omitempty"` ProgressRate *RespProgressRate `json:"progress_rate,omitempty"` } + +// ========== Simple-style response types (semi-plain text format) ========== + +// RespKeyResultSimple is KeyResult response with SemiPlainContent instead of ContentBlock JSON string. +type RespKeyResultSimple struct { + ID string `json:"id"` + CreateTime string `json:"create_time"` + UpdateTime string `json:"update_time"` + Owner RespOwner `json:"owner"` + ObjectiveID string `json:"objective_id"` + Position *int32 `json:"position,omitempty"` + Content *SemiPlainContent `json:"content,omitempty"` + Score *float64 `json:"score,omitempty"` + Weight *float64 `json:"weight,omitempty"` + Deadline *string `json:"deadline,omitempty"` +} + +// RespObjectiveSimple is Objective response with SemiPlainContent instead of ContentBlock JSON string. +type RespObjectiveSimple struct { + ID string `json:"id"` + CreateTime string `json:"create_time"` + UpdateTime string `json:"update_time"` + Owner RespOwner `json:"owner"` + CycleID string `json:"cycle_id"` + Position *int32 `json:"position,omitempty"` + Content *SemiPlainContent `json:"content,omitempty"` + Score *float64 `json:"score,omitempty"` + Notes *SemiPlainContent `json:"notes,omitempty"` + Weight *float64 `json:"weight,omitempty"` + Deadline *string `json:"deadline,omitempty"` + CategoryID *string `json:"category_id,omitempty"` + KeyResults []RespKeyResultSimple `json:"key_results,omitempty"` +} + +// RespProgressSimple is Progress response with SemiPlainContent instead of ContentBlock JSON string. +type RespProgressSimple struct { + ID string `json:"progress_id"` + ModifyTime string `json:"modify_time"` + CreateTime *string `json:"create_time,omitempty"` + Content *SemiPlainContent `json:"content,omitempty"` + ProgressRate *RespProgressRate `json:"progress_rate,omitempty"` +} + +// ToSimple converts KeyResult to RespKeyResultSimple. +func (k *KeyResult) ToSimple() *RespKeyResultSimple { + if k == nil { + return nil + } + result := &RespKeyResultSimple{ + ID: k.ID, + CreateTime: formatTimestamp(k.CreateTime), + UpdateTime: formatTimestamp(k.UpdateTime), + Owner: *k.Owner.ToResp(), + ObjectiveID: k.ObjectiveID, + Position: k.Position, + Score: k.Score, + Weight: k.Weight, + } + if k.Deadline != nil { + d := formatTimestamp(*k.Deadline) + result.Deadline = &d + } + result.Content = k.Content.ToSemiPlain() + return result +} + +// ToSimple converts Objective to RespObjectiveSimple. +func (o *Objective) ToSimple() *RespObjectiveSimple { + if o == nil { + return nil + } + result := &RespObjectiveSimple{ + ID: o.ID, + CreateTime: formatTimestamp(o.CreateTime), + UpdateTime: formatTimestamp(o.UpdateTime), + Owner: *o.Owner.ToResp(), + CycleID: o.CycleID, + Position: o.Position, + Score: o.Score, + Weight: o.Weight, + CategoryID: o.CategoryID, + } + if o.Deadline != nil { + d := formatTimestamp(*o.Deadline) + result.Deadline = &d + } + result.Content = o.Content.ToSemiPlain() + result.Notes = o.Notes.ToSemiPlain() + return result +} + +// ToSimple converts ProgressV1 to RespProgressSimple. +func (p *ProgressV1) ToSimple() *RespProgressSimple { + if p == nil { + return nil + } + resp := &RespProgressSimple{ + ID: p.ID, + ModifyTime: formatTimestamp(p.ModifyTime), + } + if p.ProgressRate != nil { + resp.ProgressRate = &RespProgressRate{ + Percent: p.ProgressRate.Percent, + } + if p.ProgressRate.Status != nil { + s := ProgressStatus(*p.ProgressRate.Status).String() + if s != "" { + resp.ProgressRate.Status = &s + } + } + } + if p.Content != nil { + resp.Content = p.Content.ToV2().ToSemiPlain() + } + return resp +} + +// ToSimple converts Progress to RespProgressSimple. +func (p *Progress) ToSimple() *RespProgressSimple { + if p == nil { + return nil + } + createTime := formatTimestamp(p.CreateTime) + resp := &RespProgressSimple{ + ID: p.ID, + ModifyTime: formatTimestamp(p.UpdateTime), + CreateTime: &createTime, + } + if p.ProgressRate != nil { + resp.ProgressRate = &RespProgressRate{ + Percent: p.ProgressRate.ProgressPercent, + } + if p.ProgressRate.ProgressStatus != nil { + s := ProgressStatus(*p.ProgressRate.ProgressStatus).String() + if s != "" { + resp.ProgressRate.Status = &s + } + } + } + resp.Content = p.Content.ToSemiPlain() + return resp +} diff --git a/shortcuts/okr/okr_cycle_detail.go b/shortcuts/okr/okr_cycle_detail.go index 3839e1d1a..41be7b23f 100644 --- a/shortcuts/okr/okr_cycle_detail.go +++ b/shortcuts/okr/okr_cycle_detail.go @@ -26,6 +26,7 @@ var OKRCycleDetail = common.Shortcut{ HasFormat: true, Flags: []common.Flag{ {Name: "cycle-id", Desc: "OKR cycle id (int64)", Required: true}, + {Name: "style", Default: "simple", Desc: "output style: simple (semi-plain text JSON) | richtext (ContentBlock JSON)", Enum: []string{"simple", "richtext"}}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { cycleID := runtime.Str("cycle-id") @@ -35,6 +36,10 @@ var OKRCycleDetail = common.Shortcut{ if id, err := strconv.ParseInt(cycleID, 10, 64); err != nil || id <= 0 { return errs.NewValidationError(errs.SubtypeInvalidArgument, "--cycle-id must be a positive int64").WithParam("--cycle-id") } + style := runtime.Str("style") + if style != "simple" && style != "richtext" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--style must be one of: simple | richtext").WithParam("--style") + } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { @@ -50,6 +55,7 @@ var OKRCycleDetail = common.Shortcut{ }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { cycleID := runtime.Str("cycle-id") + style := runtime.Str("style") // Paginate objectives under the cycle. queryParams := map[string]interface{}{"page_size": "100"} @@ -96,85 +102,106 @@ var OKRCycleDetail = common.Shortcut{ } // For each objective, paginate key results and convert to response format. - respObjectives := make([]*RespObjective, 0, len(objectives)) - for i := range objectives { - if err := ctx.Err(); err != nil { - return err - } - obj := &objectives[i] - - krQuery := map[string]interface{}{"page_size": "100"} - - var keyResults []KeyResult - krPage := 0 - for { + if style == "simple" { + respObjectives := make([]*RespObjectiveSimple, 0, len(objectives)) + for i := range objectives { if err := ctx.Err(); err != nil { return err } - if krPage > 0 { - select { - case <-ctx.Done(): - return ctx.Err() - case <-time.After(500 * time.Millisecond): - } - } - krPage++ + obj := &objectives[i] - path := fmt.Sprintf("/open-apis/okr/v2/objectives/%s/key_results", obj.ID) - data, err := runtime.CallAPITyped("GET", path, krQuery, nil) + keyResults, err := fetchKeyResults(ctx, runtime, obj.ID) if err != nil { return err } - itemsRaw, _ := data["items"].([]interface{}) - for _, item := range itemsRaw { - raw, err := json.Marshal(item) - if err != nil { - continue + respObj := obj.ToSimple() + if respObj == nil { + continue + } + respKRs := make([]RespKeyResultSimple, 0, len(keyResults)) + for j := range keyResults { + if r := keyResults[j].ToSimple(); r != nil { + respKRs = append(respKRs, *r) } - var kr KeyResult - if err := json.Unmarshal(raw, &kr); err != nil { - continue + } + respObj.KeyResults = respKRs + respObjectives = append(respObjectives, respObj) + } + + result := map[string]interface{}{ + "cycle_id": cycleID, + "objectives": respObjectives, + "total": len(respObjectives), + "style": style, + } + + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Cycle %s: %d objective(s) (style: %s)\n", cycleID, len(respObjectives), style) + for _, o := range respObjectives { + contentText := "" + if o.Content != nil { + contentText = o.Content.Text } - keyResults = append(keyResults, kr) + notesText := "" + if o.Notes != nil { + notesText = o.Notes.Text + } + fmt.Fprintf(w, "Objective [%s]: %s \n Notes: %s \n score=%.2f weight=%.2f\n", o.ID, contentText, notesText, ptrFloat64(o.Score), ptrFloat64(o.Weight)) + for _, kr := range o.KeyResults { + krText := "" + if kr.Content != nil { + krText = kr.Content.Text + } + fmt.Fprintf(w, " - KR [%s]: %s \n score=%.2f weight=%.2f\n", kr.ID, krText, ptrFloat64(kr.Score), ptrFloat64(kr.Weight)) + } + } + }) + } else { + // richtext mode + respObjectives := make([]*RespObjective, 0, len(objectives)) + for i := range objectives { + if err := ctx.Err(); err != nil { + return err + } + obj := &objectives[i] + + keyResults, err := fetchKeyResults(ctx, runtime, obj.ID) + if err != nil { + return err } - hasMore, pageToken := common.PaginationMeta(data) - if !hasMore || pageToken == "" { - break + respObj := obj.ToResp() + if respObj == nil { + continue } - krQuery["page_token"] = pageToken + respKRs := make([]RespKeyResult, 0, len(keyResults)) + for j := range keyResults { + if r := keyResults[j].ToResp(); r != nil { + respKRs = append(respKRs, *r) + } + } + respObj.KeyResults = respKRs + respObjectives = append(respObjectives, respObj) } - respObj := obj.ToResp() - if respObj == nil { - continue + result := map[string]interface{}{ + "cycle_id": cycleID, + "objectives": respObjectives, + "total": len(respObjectives), + "style": style, } - respKRs := make([]RespKeyResult, 0, len(keyResults)) - for j := range keyResults { - if r := keyResults[j].ToResp(); r != nil { - respKRs = append(respKRs, *r) + + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Cycle %s: %d objective(s) (style: %s)\n", cycleID, len(respObjectives), style) + for _, o := range respObjectives { + fmt.Fprintf(w, "Objective [%s]: %s \n Notes: %s \n score=%.2f weight=%.2f\n", o.ID, ptrStr(o.Content), ptrStr(o.Notes), ptrFloat64(o.Score), ptrFloat64(o.Weight)) + for _, kr := range o.KeyResults { + fmt.Fprintf(w, " - KR [%s]: %s \n score=%.2f weight=%.2f\n", kr.ID, ptrStr(kr.Content), ptrFloat64(kr.Score), ptrFloat64(kr.Weight)) + } } - } - respObj.KeyResults = respKRs - respObjectives = append(respObjectives, respObj) + }) } - - result := map[string]interface{}{ - "cycle_id": cycleID, - "objectives": respObjectives, - "total": len(respObjectives), - } - - runtime.OutFormat(result, nil, func(w io.Writer) { - fmt.Fprintf(w, "Cycle %s: %d objective(s)\n", cycleID, len(respObjectives)) - for _, o := range respObjectives { - fmt.Fprintf(w, "Objective [%s]: %s \n Notes: %s \n score=%.2f weight=%.2f\n", o.ID, ptrStr(o.Content), ptrStr(o.Notes), ptrFloat64(o.Score), ptrFloat64(o.Weight)) - for _, kr := range o.KeyResults { - fmt.Fprintf(w, " - KR [%s]: %s \n score=%.2f weight=%.2f\n", kr.ID, ptrStr(kr.Content), ptrFloat64(kr.Score), ptrFloat64(kr.Weight)) - } - } - }) return nil }, } diff --git a/shortcuts/okr/okr_cycle_list.go b/shortcuts/okr/okr_cycle_list.go index c236b288c..4055908cb 100644 --- a/shortcuts/okr/okr_cycle_list.go +++ b/shortcuts/okr/okr_cycle_list.go @@ -46,12 +46,38 @@ func cycleOverlaps(cycle *Cycle, rangeStart, rangeEnd time.Time) bool { if err1 != nil || err2 != nil { return false } - cycleStart := time.UnixMilli(startMs) - cycleEnd := time.UnixMilli(endMs) + cycleStart := time.UnixMilli(startMs).UTC() + cycleEnd := time.UnixMilli(endMs).UTC() // Two ranges overlap iff one starts before the other ends return !cycleStart.After(rangeEnd) && !cycleEnd.Before(rangeStart) } +// isCurrentActiveCycle checks whether a cycle is currently active: +// - current time is within the cycle's start and end time +// - cycle status is default (0) or normal (1) +func isCurrentActiveCycle(cycle *Cycle, now time.Time) bool { + startMs, err1 := strconv.ParseInt(cycle.StartTime, 10, 64) + endMs, err2 := strconv.ParseInt(cycle.EndTime, 10, 64) + if err1 != nil || err2 != nil { + return false + } + cycleStart := time.UnixMilli(startMs).UTC() + cycleEnd := time.UnixMilli(endMs).UTC() + nowUTC := now.UTC() + + // Check time range: now must be >= start and <= end + if nowUTC.Before(cycleStart) || nowUTC.After(cycleEnd) { + return false + } + + // Check status: must be default or normal + if cycle.CycleStatus == nil { + return false + } + status := *cycle.CycleStatus + return status == CycleStatusDefault || status == CycleStatusNormal +} + var OKRListCycles = common.Shortcut{ Service: "okr", Command: "+cycle-list", @@ -175,14 +201,30 @@ var OKRListCycles = common.Shortcut{ respCycles = append(respCycles, filtered[i].ToResp()) } + // Filter current active cycles + now := time.Now() + currentActiveCycles := make([]*RespCycle, 0) + for i := range filtered { + if isCurrentActiveCycle(&filtered[i], now) { + currentActiveCycles = append(currentActiveCycles, filtered[i].ToResp()) + } + } + runtime.OutFormat(map[string]interface{}{ - "cycles": respCycles, - "total": len(respCycles), + "cycles": respCycles, + "total": len(respCycles), + "current_active_cycles": currentActiveCycles, }, nil, func(w io.Writer) { fmt.Fprintf(w, "Found %d cycle(s)\n", len(respCycles)) for _, c := range respCycles { fmt.Fprintf(w, " [%s] %s ~ %s (status: %s)\n", c.ID, c.StartTime, c.EndTime, ptrStr(c.CycleStatus)) } + if len(currentActiveCycles) > 0 { + fmt.Fprintf(w, "\nCurrent active cycle(s):\n") + for _, c := range currentActiveCycles { + fmt.Fprintf(w, " [%s] %s ~ %s\n", c.ID, c.StartTime, c.EndTime) + } + } }) return nil }, diff --git a/shortcuts/okr/okr_cycle_list_test.go b/shortcuts/okr/okr_cycle_list_test.go index 53b0a5c76..951cbcdad 100644 --- a/shortcuts/okr/okr_cycle_list_test.go +++ b/shortcuts/okr/okr_cycle_list_test.go @@ -5,8 +5,10 @@ package okr import ( "bytes" + "strconv" "strings" "testing" + "time" "github.com/spf13/cobra" @@ -260,11 +262,156 @@ func TestCycleListExecute_NoCycles(t *testing.T) { if len(cycles) != 0 { t.Fatalf("cycles = %v, want empty", cycles) } + // Assert current_active_cycles field exists and is a slice + rawCurrentActive, ok := data["current_active_cycles"] + if !ok { + t.Fatal("current_active_cycles field is missing from response") + } + currentActive, ok := rawCurrentActive.([]interface{}) + if !ok { + t.Fatalf("current_active_cycles is not a slice, got %T", rawCurrentActive) + } + if len(currentActive) != 0 { + t.Fatalf("current_active_cycles = %v, want empty", currentActive) + } +} + +// --- isCurrentActiveCycle unit tests --- + +func TestIsCurrentActiveCycle(t *testing.T) { + t.Parallel() + now := time.Date(2026, 6, 29, 12, 0, 0, 0, time.UTC) + + tests := []struct { + name string + cycle *Cycle + expected bool + }{ + { + name: "active cycle with normal status", + cycle: &Cycle{ + ID: "c1", + StartTime: "1767225600000", // 2026-01-01 + EndTime: "1798761599999", // 2026-12-31 23:59:59 + CycleStatus: CycleStatusNormal.Ptr(), + }, + expected: true, + }, + { + name: "active cycle with default status", + cycle: &Cycle{ + ID: "c2", + StartTime: "1767225600000", // 2026-01-01 + EndTime: "1798761599999", // 2026-12-31 + CycleStatus: CycleStatusDefault.Ptr(), + }, + expected: true, + }, + { + name: "cycle with invalid status", + cycle: &Cycle{ + ID: "c3", + StartTime: "1767225600000", // 2026-01-01 + EndTime: "1798761599999", // 2026-12-31 + CycleStatus: CycleStatusInvalid.Ptr(), + }, + expected: false, + }, + { + name: "cycle with hidden status", + cycle: &Cycle{ + ID: "c4", + StartTime: "1767225600000", // 2026-01-01 + EndTime: "1798761599999", // 2026-12-31 + CycleStatus: CycleStatusHidden.Ptr(), + }, + expected: false, + }, + { + name: "past cycle", + cycle: &Cycle{ + ID: "c5", + StartTime: "1704067200000", // 2024-01-01 + EndTime: "1719791999999", // 2024-06-30 + CycleStatus: CycleStatusNormal.Ptr(), + }, + expected: false, + }, + { + name: "future cycle", + cycle: &Cycle{ + ID: "c6", + StartTime: "1830297600000", // 2028-01-01 + EndTime: "1861833599999", // 2028-12-31 + CycleStatus: CycleStatusNormal.Ptr(), + }, + expected: false, + }, + { + name: "nil cycle status", + cycle: &Cycle{ + ID: "c7", + StartTime: "1767225600000", // 2026-01-01 + EndTime: "1798761599999", // 2026-12-31 + CycleStatus: nil, + }, + expected: false, + }, + { + name: "invalid start time", + cycle: &Cycle{ + ID: "c8", + StartTime: "invalid", + EndTime: "1798761599999", // 2026-12-31 + CycleStatus: CycleStatusNormal.Ptr(), + }, + expected: false, + }, + { + name: "exact start time boundary", + cycle: &Cycle{ + ID: "c9", + StartTime: "1782734400000", // 2026-06-29 12:00:00 UTC + EndTime: "1798761599000", // 2026-12-31 23:59:59 UTC + CycleStatus: CycleStatusNormal.Ptr(), + }, + expected: true, + }, + { + name: "exact end time boundary", + cycle: &Cycle{ + ID: "c10", + StartTime: "1767225600000", // 2026-01-01 00:00:00 UTC + EndTime: "1782734400000", // 2026-06-29 12:00:00 UTC + CycleStatus: CycleStatusNormal.Ptr(), + }, + expected: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := isCurrentActiveCycle(tt.cycle, now) + if result != tt.expected { + t.Fatalf("isCurrentActiveCycle() = %v, want %v", result, tt.expected) + } + }) + } } func TestCycleListExecute_WithCycles(t *testing.T) { t.Parallel() f, stdout, _, reg := cmdutil.TestFactory(t, cycleListTestConfig(t)) + + // Calculate timestamps relative to now to avoid test expiration + now := time.Now().UTC() + // Active cycle: 6 months before to 6 months after now + activeStartMs := now.AddDate(0, -6, 0).UnixMilli() + activeEndMs := now.AddDate(0, 6, 0).UnixMilli() + // Past cycle: 2 years before to 1.5 years before now + pastStartMs := now.AddDate(-2, 0, 0).UnixMilli() + pastEndMs := now.AddDate(-1, -6, 0).UnixMilli() + reg.Register(&httpmock.Stub{ Method: "GET", URL: "/open-apis/okr/v2/cycles", @@ -274,19 +421,19 @@ func TestCycleListExecute_WithCycles(t *testing.T) { "data": map[string]interface{}{ "items": []interface{}{ map[string]interface{}{ - "id": "cycle-1", - "start_time": "1735689600000", - "end_time": "1751318400000", - "cycle_status": 1, + "id": "cycle-active", + "start_time": strconv.FormatInt(activeStartMs, 10), + "end_time": strconv.FormatInt(activeEndMs, 10), + "cycle_status": 1, // normal "owner": map[string]interface{}{"owner_type": "user", "user_id": "ou-1"}, "tenant_cycle_id": "tc-1", "score": 0.75, }, map[string]interface{}{ - "id": "cycle-2", - "start_time": "1704067200000", - "end_time": "1719792000000", - "cycle_status": 2, + "id": "cycle-past", + "start_time": strconv.FormatInt(pastStartMs, 10), + "end_time": strconv.FormatInt(pastEndMs, 10), + "cycle_status": 2, // invalid "owner": map[string]interface{}{"owner_type": "user", "user_id": "ou-1"}, "tenant_cycle_id": "tc-2", "score": 0.5, @@ -311,6 +458,46 @@ func TestCycleListExecute_WithCycles(t *testing.T) { if int(total) != 2 { t.Fatalf("total = %v, want 2", total) } + + // Check current_active_cycles - should only contain cycle-active + rawCurrentActive, ok := data["current_active_cycles"] + if !ok { + t.Fatal("current_active_cycles field is missing from response") + } + currentActive, ok := rawCurrentActive.([]interface{}) + if !ok { + t.Fatalf("current_active_cycles is not a slice, got %T", rawCurrentActive) + } + if len(currentActive) != 1 { + t.Fatalf("current_active_cycles count = %d, want 1", len(currentActive)) + } + activeCycle, ok := currentActive[0].(map[string]interface{}) + if !ok { + t.Fatalf("current_active_cycles[0] is not a map, got %T", currentActive[0]) + } + if activeCycle["id"] != "cycle-active" { + t.Fatalf("current_active_cycles[0].id = %v, want cycle-active", activeCycle["id"]) + } + + // Verify removed fields are not present in the response + for _, c := range cycles { + cycleMap, _ := c.(map[string]interface{}) + if _, ok := cycleMap["create_time"]; ok { + t.Fatal("create_time should not be present in response") + } + if _, ok := cycleMap["update_time"]; ok { + t.Fatal("update_time should not be present in response") + } + if _, ok := cycleMap["tenant_cycle_id"]; ok { + t.Fatal("tenant_cycle_id should not be present in response") + } + if _, ok := cycleMap["owner"]; ok { + t.Fatal("owner should not be present in response") + } + if _, ok := cycleMap["score"]; ok { + t.Fatal("score should not be present in response") + } + } } func TestCycleListExecute_WithTimeRangeFilter(t *testing.T) { diff --git a/shortcuts/okr/okr_openapi.go b/shortcuts/okr/okr_openapi.go index 32794030e..4e65a37d3 100644 --- a/shortcuts/okr/okr_openapi.go +++ b/shortcuts/okr/okr_openapi.go @@ -5,7 +5,9 @@ package okr import ( "encoding/json" + "regexp" "strconv" + "strings" "time" ) @@ -261,14 +263,9 @@ func (c *Cycle) ToResp() *RespCycle { return nil } resp := &RespCycle{ - ID: c.ID, - CreateTime: formatTimestamp(c.CreateTime), - UpdateTime: formatTimestamp(c.UpdateTime), - TenantCycleID: c.TenantCycleID, - Owner: *c.Owner.ToResp(), - StartTime: formatTimestamp(c.StartTime), - EndTime: formatTimestamp(c.EndTime), - Score: c.Score, + ID: c.ID, + StartTime: formatTimestamp(c.StartTime), + EndTime: formatTimestamp(c.EndTime), } if c.CycleStatus != nil { s := c.CycleStatus.ToString() @@ -733,6 +730,131 @@ func (p *ContentPersonV1) ToV2() *ContentMention { } } +// ========== SemiPlainContent (半纯文本格式) ========== + +// Regex patterns for semi-plain text processing (pre-compiled for performance). +var ( + placeholderRE = regexp.MustCompile(`\s*@\{[^}]+\}\s*`) + multiSpaceRE = regexp.MustCompile(`\s+`) +) + +// SemiPlainDoc represents a document link in semi-plain content. +type SemiPlainDoc struct { + Title string `json:"title"` + URL string `json:"url"` +} + +// SemiPlainContent is a simplified, lossy representation of ContentBlock. +// It contains plain text, mentions, docs, and images without rich formatting or position info. +type SemiPlainContent struct { + Text string `json:"text"` + Mention []string `json:"mention,omitempty"` + Docs []SemiPlainDoc `json:"docs,omitempty"` + Images []string `json:"images,omitempty"` +} + +// ToSemiPlain converts ContentBlock to SemiPlainContent (lossy conversion). +// Position information and formatting are discarded; only text, mentions, docs, and images are extracted. +func (c *ContentBlock) ToSemiPlain() *SemiPlainContent { + if c == nil { + return nil + } + result := &SemiPlainContent{} + var textParts []string + + for _, block := range c.Blocks { + if block.Paragraph != nil { + for _, elem := range block.Paragraph.Elements { + switch { + case elem.TextRun != nil && elem.TextRun.Text != nil: + textParts = append(textParts, *elem.TextRun.Text) + case elem.Mention != nil && elem.Mention.UserID != nil: + textParts = append(textParts, " @{"+*elem.Mention.UserID+"} ") + result.Mention = append(result.Mention, *elem.Mention.UserID) + case elem.DocsLink != nil: + doc := SemiPlainDoc{} + if elem.DocsLink.Title != nil { + doc.Title = *elem.DocsLink.Title + } + if elem.DocsLink.URL != nil { + doc.URL = *elem.DocsLink.URL + } + result.Docs = append(result.Docs, doc) + } + } + } + if block.Gallery != nil { + for _, img := range block.Gallery.Images { + if img.Src != nil { + result.Images = append(result.Images, *img.Src) + } + } + } + } + + result.Text = strings.Join(textParts, "") + return result +} + +// ToContentBlock converts SemiPlainContent to ContentBlock. +// Text and mentions are placed in a single paragraph (text first, then mentions). +// Docs and images are NOT converted (input semi-plain format only supports text+mention). +func (s *SemiPlainContent) ToContentBlock() *ContentBlock { + if s == nil { + return nil + } + elements := make([]ContentParagraphElement, 0, len(s.Mention)+1) + + // Strip @{userID} placeholders from text to avoid duplicate mentions + // (these placeholders are only for readability in the output format) + strippedText := placeholderRE.ReplaceAllString(s.Text, " ") + // Collapse multiple spaces and trim + strippedText = multiSpaceRE.ReplaceAllString(strippedText, " ") + strippedText = strings.TrimSpace(strippedText) + + // Add text element if stripped text is not empty + if strippedText != "" { + text := strippedText + elements = append(elements, ContentParagraphElement{ + ParagraphElementType: ParagraphElementTypeTextRun.Ptr(), + TextRun: &ContentTextRun{ + Text: &text, + }, + }) + } + + // Add mention elements + for _, mention := range s.Mention { + m := mention + elements = append(elements, ContentParagraphElement{ + ParagraphElementType: ParagraphElementTypeMention.Ptr(), + Mention: &ContentMention{ + UserID: &m, + }, + }) + } + + return &ContentBlock{ + Blocks: []ContentBlockElement{ + { + BlockElementType: BlockElementTypeParagraph.Ptr(), + Paragraph: &ContentParagraph{ + Elements: elements, + }, + }, + }, + } +} + +// BuildContentBlock converts text and mentions to a ContentBlock. +// This is a convenience wrapper around SemiPlainContent.ToContentBlock(). +func BuildContentBlock(text string, mentions []string) *ContentBlock { + return (&SemiPlainContent{ + Text: text, + Mention: mentions, + }).ToContentBlock() +} + // ProgressRateV1 进度率 type ProgressRateV1 struct { Percent *float64 `json:"percent,omitempty"` diff --git a/shortcuts/okr/okr_openapi_test.go b/shortcuts/okr/okr_openapi_test.go index d123dc92f..01ace5729 100644 --- a/shortcuts/okr/okr_openapi_test.go +++ b/shortcuts/okr/okr_openapi_test.go @@ -57,7 +57,9 @@ func TestToRespMethods(t *testing.T) { convey.So(resp, convey.ShouldNotBeNil) convey.So(resp.ID, convey.ShouldEqual, "cycle-id") convey.So(*resp.CycleStatus, convey.ShouldEqual, "normal") - convey.So(*resp.Score, convey.ShouldEqual, 0.75) + // Verify removed fields are not present in RespCycle + convey.So(resp.StartTime, convey.ShouldNotBeEmpty) + convey.So(resp.EndTime, convey.ShouldNotBeEmpty) }) convey.Convey("Objective", func() { @@ -518,5 +520,449 @@ func float64Ptr(v float64) *float64 { return &v } // boolPtr returns a pointer to the given bool value. func boolPtr(v bool) *bool { return &v } +// ========== SemiPlainContent Conversion Tests ========== + +func TestContentBlockToSemiPlain_TextOnly(t *testing.T) { + t.Parallel() + cb := &ContentBlock{ + Blocks: []ContentBlockElement{ + { + BlockElementType: BlockElementTypeParagraph.Ptr(), + Paragraph: &ContentParagraph{ + Elements: []ContentParagraphElement{ + { + ParagraphElementType: ParagraphElementTypeTextRun.Ptr(), + TextRun: &ContentTextRun{ + Text: strPtr("Hello world"), + }, + }, + }, + }, + }, + }, + } + sp := cb.ToSemiPlain() + if sp == nil { + t.Fatal("expected non-nil SemiPlainContent") + } + if sp.Text != "Hello world" { + t.Fatalf("expected text 'Hello world', got '%s'", sp.Text) + } + if len(sp.Mention) != 0 { + t.Fatalf("expected 0 mentions, got %d", len(sp.Mention)) + } + if len(sp.Docs) != 0 { + t.Fatalf("expected 0 docs, got %d", len(sp.Docs)) + } + if len(sp.Images) != 0 { + t.Fatalf("expected 0 images, got %d", len(sp.Images)) + } +} + +func TestContentBlockToSemiPlain_WithMention(t *testing.T) { + t.Parallel() + cb := &ContentBlock{ + Blocks: []ContentBlockElement{ + { + BlockElementType: BlockElementTypeParagraph.Ptr(), + Paragraph: &ContentParagraph{ + Elements: []ContentParagraphElement{ + { + ParagraphElementType: ParagraphElementTypeTextRun.Ptr(), + TextRun: &ContentTextRun{ + Text: strPtr("Hello "), + }, + }, + { + ParagraphElementType: ParagraphElementTypeMention.Ptr(), + Mention: &ContentMention{ + UserID: strPtr("ou_123"), + }, + }, + { + ParagraphElementType: ParagraphElementTypeTextRun.Ptr(), + TextRun: &ContentTextRun{ + Text: strPtr(", how are you?"), + }, + }, + }, + }, + }, + }, + } + sp := cb.ToSemiPlain() + if sp == nil { + t.Fatal("expected non-nil SemiPlainContent") + } + // Text includes @{userID} placeholder to preserve positional context + if sp.Text != "Hello @{ou_123} , how are you?" { + t.Fatalf("expected text 'Hello @{ou_123} , how are you?', got '%s'", sp.Text) + } + if len(sp.Mention) != 1 || sp.Mention[0] != "ou_123" { + t.Fatalf("expected mention [ou_123], got %v", sp.Mention) + } +} + +func TestContentBlockToSemiPlain_WithDocsAndImages(t *testing.T) { + t.Parallel() + cb := &ContentBlock{ + Blocks: []ContentBlockElement{ + { + BlockElementType: BlockElementTypeParagraph.Ptr(), + Paragraph: &ContentParagraph{ + Elements: []ContentParagraphElement{ + { + ParagraphElementType: ParagraphElementTypeTextRun.Ptr(), + TextRun: &ContentTextRun{ + Text: strPtr("Check out this doc: "), + }, + }, + { + ParagraphElementType: ParagraphElementTypeDocsLink.Ptr(), + DocsLink: &ContentDocsLink{ + Title: strPtr("Design Doc"), + URL: strPtr("https://example.feishu.cn/docx/xxx"), + }, + }, + }, + }, + }, + { + BlockElementType: BlockElementTypeGallery.Ptr(), + Gallery: &ContentGallery{ + Images: []ContentImageItem{ + { + Src: strPtr("https://example.com/img1.png"), + }, + { + Src: strPtr("https://example.com/img2.png"), + }, + }, + }, + }, + }, + } + sp := cb.ToSemiPlain() + if sp == nil { + t.Fatal("expected non-nil SemiPlainContent") + } + if sp.Text != "Check out this doc: " { + t.Fatalf("unexpected text: '%s'", sp.Text) + } + if len(sp.Docs) != 1 { + t.Fatalf("expected 1 doc, got %d", len(sp.Docs)) + } + if sp.Docs[0].Title != "Design Doc" || sp.Docs[0].URL != "https://example.feishu.cn/docx/xxx" { + t.Fatalf("unexpected doc: %+v", sp.Docs[0]) + } + if len(sp.Images) != 2 { + t.Fatalf("expected 2 images, got %d", len(sp.Images)) + } + if sp.Images[0] != "https://example.com/img1.png" || sp.Images[1] != "https://example.com/img2.png" { + t.Fatalf("unexpected images: %v", sp.Images) + } +} + +func TestContentBlockToSemiPlain_Nil(t *testing.T) { + t.Parallel() + var cb *ContentBlock + sp := cb.ToSemiPlain() + if sp != nil { + t.Fatal("expected nil SemiPlainContent for nil ContentBlock") + } +} + +func TestSemiPlainContentToContentBlock_TextOnly(t *testing.T) { + t.Parallel() + sp := &SemiPlainContent{ + Text: "Hello world", + } + cb := sp.ToContentBlock() + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + if len(cb.Blocks) != 1 { + t.Fatalf("expected 1 block, got %d", len(cb.Blocks)) + } + block := cb.Blocks[0] + if block.BlockElementType == nil || *block.BlockElementType != BlockElementTypeParagraph { + t.Fatal("expected paragraph block") + } + if block.Paragraph == nil || len(block.Paragraph.Elements) != 1 { + t.Fatalf("expected 1 paragraph element, got %d", len(block.Paragraph.Elements)) + } + elem := block.Paragraph.Elements[0] + if elem.ParagraphElementType == nil || *elem.ParagraphElementType != ParagraphElementTypeTextRun { + t.Fatal("expected textRun element") + } + if elem.TextRun == nil || elem.TextRun.Text == nil || *elem.TextRun.Text != "Hello world" { + t.Fatalf("unexpected text: %v", elem.TextRun) + } +} + +func TestSemiPlainContentToContentBlock_WithMentions(t *testing.T) { + t.Parallel() + sp := &SemiPlainContent{ + Text: "Please review", + Mention: []string{"ou_123", "ou_456"}, + } + cb := sp.ToContentBlock() + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + if len(cb.Blocks) != 1 { + t.Fatalf("expected 1 block, got %d", len(cb.Blocks)) + } + elems := cb.Blocks[0].Paragraph.Elements + if len(elems) != 3 { + t.Fatalf("expected 3 elements (1 text + 2 mentions), got %d", len(elems)) + } + if *elems[0].ParagraphElementType != ParagraphElementTypeTextRun || *elems[0].TextRun.Text != "Please review" { + t.Fatal("unexpected first element") + } + if *elems[1].ParagraphElementType != ParagraphElementTypeMention || *elems[1].Mention.UserID != "ou_123" { + t.Fatal("unexpected second element") + } + if *elems[2].ParagraphElementType != ParagraphElementTypeMention || *elems[2].Mention.UserID != "ou_456" { + t.Fatal("unexpected third element") + } +} + +func TestSemiPlainContentToContentBlock_EmptyText(t *testing.T) { + t.Parallel() + sp := &SemiPlainContent{ + Text: " ", + Mention: []string{"ou_123"}, + } + cb := sp.ToContentBlock() + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + elems := cb.Blocks[0].Paragraph.Elements + // Empty text should be skipped, only mention remains + if len(elems) != 1 { + t.Fatalf("expected 1 element (mention only), got %d", len(elems)) + } + if *elems[0].ParagraphElementType != ParagraphElementTypeMention { + t.Fatal("expected mention element") + } +} + +func TestSemiPlainContentToContentBlock_DocsImagesIgnored(t *testing.T) { + t.Parallel() + sp := &SemiPlainContent{ + Text: "Test", + Mention: []string{"ou_123"}, + Docs: []SemiPlainDoc{{Title: "Doc", URL: "https://..."}}, + Images: []string{"https://img.png"}, + } + cb := sp.ToContentBlock() + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + elems := cb.Blocks[0].Paragraph.Elements + // Docs and images are ignored in input conversion + if len(elems) != 2 { + t.Fatalf("expected 2 elements (text + mention), got %d", len(elems)) + } +} + +func TestSemiPlainContentToContentBlock_PlaceholderStripping(t *testing.T) { + t.Parallel() + // Simulate round-trip: output format has @{userID} in text, + // input conversion should strip them to avoid duplicate mentions + sp := &SemiPlainContent{ + Text: "任务一 @{ou_zhangsan} ,任务二 @{ou_lisi} ", + Mention: []string{"ou_zhangsan", "ou_lisi"}, + } + cb := sp.ToContentBlock() + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + elems := cb.Blocks[0].Paragraph.Elements + // Should have 3 elements: 1 text (stripped) + 2 mentions + if len(elems) != 3 { + t.Fatalf("expected 3 elements (1 text + 2 mentions), got %d", len(elems)) + } + // Text should have placeholders stripped + if *elems[0].ParagraphElementType != ParagraphElementTypeTextRun { + t.Fatal("expected first element to be textRun") + } + // Note: space before comma is preserved from the placeholder's trailing space + expectedText := "任务一 ,任务二" + if *elems[0].TextRun.Text != expectedText { + t.Fatalf("expected stripped text '%s', got '%s'", expectedText, *elems[0].TextRun.Text) + } + // Mentions should be preserved as separate elements + if *elems[1].ParagraphElementType != ParagraphElementTypeMention || *elems[1].Mention.UserID != "ou_zhangsan" { + t.Fatal("unexpected second element") + } + if *elems[2].ParagraphElementType != ParagraphElementTypeMention || *elems[2].Mention.UserID != "ou_lisi" { + t.Fatal("unexpected third element") + } +} + +func TestSemiPlainContentToContentBlock_OnlyPlaceholders(t *testing.T) { + t.Parallel() + // Text that is only placeholders should result in no text element + sp := &SemiPlainContent{ + Text: " @{ou_123} @{ou_456} ", + Mention: []string{"ou_123", "ou_456"}, + } + cb := sp.ToContentBlock() + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + elems := cb.Blocks[0].Paragraph.Elements + // Should have only 2 mention elements, no text element + if len(elems) != 2 { + t.Fatalf("expected 2 elements (mentions only), got %d", len(elems)) + } + if *elems[0].ParagraphElementType != ParagraphElementTypeMention { + t.Fatal("expected first element to be mention") + } + if *elems[1].ParagraphElementType != ParagraphElementTypeMention { + t.Fatal("expected second element to be mention") + } +} + +func TestSemiPlainContentToContentBlock_Nil(t *testing.T) { + t.Parallel() + var sp *SemiPlainContent + cb := sp.ToContentBlock() + if cb != nil { + t.Fatal("expected nil ContentBlock for nil SemiPlainContent") + } +} + +func TestBuildContentBlock_Conversion(t *testing.T) { + t.Parallel() + cb := BuildContentBlock("Test text", []string{"ou_123", "ou_456"}) + if cb == nil { + t.Fatal("expected non-nil ContentBlock") + } + elems := cb.Blocks[0].Paragraph.Elements + if len(elems) != 3 { + t.Fatalf("expected 3 elements, got %d", len(elems)) + } + if *elems[0].TextRun.Text != "Test text" { + t.Fatalf("unexpected text: %s", *elems[0].TextRun.Text) + } + if *elems[1].Mention.UserID != "ou_123" { + t.Fatalf("unexpected mention: %s", *elems[1].Mention.UserID) + } + if *elems[2].Mention.UserID != "ou_456" { + t.Fatalf("unexpected mention: %s", *elems[2].Mention.UserID) + } +} + +func TestToSimpleMethods(t *testing.T) { + t.Parallel() + + // Test Objective.ToSimple() + text := "Objective text" + obj := &Objective{ + ID: "obj-1", + Content: BuildContentBlock(text, []string{"ou_123"}), + Notes: BuildContentBlock("Note text", nil), + Owner: Owner{OwnerType: OwnerTypeUser, UserID: strPtr("ou_owner")}, + CycleID: "cycle-1", + Score: float64Ptr(0.7), + Weight: float64Ptr(0.5), + Deadline: strPtr("1735776000000"), + } + simpleObj := obj.ToSimple() + if simpleObj == nil { + t.Fatal("expected non-nil RespObjectiveSimple") + } + if simpleObj.ID != "obj-1" { + t.Fatalf("expected ID obj-1, got %s", simpleObj.ID) + } + // Text includes @{userID} placeholder for positional context + expectedContentText := "Objective text @{ou_123} " + if simpleObj.Content == nil || simpleObj.Content.Text != expectedContentText { + t.Fatalf("unexpected content text: expected '%s', got '%s'", expectedContentText, simpleObj.Content.Text) + } + if simpleObj.Notes == nil || simpleObj.Notes.Text != "Note text" { + t.Fatalf("unexpected notes: %+v", simpleObj.Notes) + } + if simpleObj.Score == nil || *simpleObj.Score != 0.7 { + t.Fatalf("unexpected score: %v", simpleObj.Score) + } + if len(simpleObj.Content.Mention) != 1 || simpleObj.Content.Mention[0] != "ou_123" { + t.Fatalf("unexpected mentions: %v", simpleObj.Content.Mention) + } + + // Test KeyResult.ToSimple() + kr := &KeyResult{ + ID: "kr-1", + ObjectiveID: "obj-1", + Content: BuildContentBlock("KR text", nil), + Owner: Owner{OwnerType: OwnerTypeUser, UserID: strPtr("ou_kr_owner")}, + Score: float64Ptr(0.5), + } + simpleKR := kr.ToSimple() + if simpleKR == nil { + t.Fatal("expected non-nil RespKeyResultSimple") + } + if simpleKR.Content == nil || simpleKR.Content.Text != "KR text" { + t.Fatalf("unexpected KR content: %+v", simpleKR.Content) + } + + // Test ProgressV1.ToSimple() + progress := &ProgressV1{ + ID: "prog-1", + ModifyTime: "1735776000000", + Content: BuildContentBlock("Progress text", []string{"ou_mention"}).ToV1(), + } + simpleProgress := progress.ToSimple() + if simpleProgress == nil { + t.Fatal("expected non-nil RespProgressSimple") + } + // Text includes @{userID} placeholder for positional context + expectedProgressText := "Progress text @{ou_mention} " + if simpleProgress.Content == nil || simpleProgress.Content.Text != expectedProgressText { + t.Fatalf("unexpected progress text: expected '%s', got '%s'", expectedProgressText, simpleProgress.Content.Text) + } + if len(simpleProgress.Content.Mention) != 1 || simpleProgress.Content.Mention[0] != "ou_mention" { + t.Fatalf("unexpected progress mentions: %v", simpleProgress.Content.Mention) + } + + // Test Progress.ToSimple() (V2 progress record) + progressV2 := &Progress{ + ID: "prog-v2-1", + CreateTime: "1735689600000", + UpdateTime: "1735776000000", + Content: BuildContentBlock("V2 progress text", []string{"ou_v2_mention"}), + ProgressRate: &ProgressRate{ + ProgressPercent: float64Ptr(80.0), + ProgressStatus: int32Ptr(int32(ProgressStatusDone)), + }, + } + simpleProgressV2 := progressV2.ToSimple() + if simpleProgressV2 == nil { + t.Fatal("expected non-nil RespProgressSimple for Progress V2") + } + if simpleProgressV2.ID != "prog-v2-1" { + t.Fatalf("expected ID prog-v2-1, got %s", simpleProgressV2.ID) + } + if simpleProgressV2.CreateTime == nil || *simpleProgressV2.CreateTime == "" { + t.Fatal("expected non-empty CreateTime for Progress V2") + } + expectedV2Text := "V2 progress text @{ou_v2_mention} " + if simpleProgressV2.Content == nil || simpleProgressV2.Content.Text != expectedV2Text { + t.Fatalf("unexpected V2 progress text: expected '%s', got '%s'", expectedV2Text, simpleProgressV2.Content.Text) + } + if simpleProgressV2.ProgressRate == nil || simpleProgressV2.ProgressRate.Status == nil || *simpleProgressV2.ProgressRate.Status != "done" { + t.Fatalf("expected progress status 'done', got %+v", simpleProgressV2.ProgressRate) + } + if simpleProgressV2.ProgressRate.Percent == nil || *simpleProgressV2.ProgressRate.Percent != 80.0 { + t.Fatalf("expected progress percent 80.0, got %v", simpleProgressV2.ProgressRate.Percent) + } + if len(simpleProgressV2.Content.Mention) != 1 || simpleProgressV2.Content.Mention[0] != "ou_v2_mention" { + t.Fatalf("unexpected V2 progress mentions: %v", simpleProgressV2.Content.Mention) + } +} + // listTypePtr returns a pointer to the given ListType value. func listTypePtr(v ListType) *ListType { return &v } diff --git a/shortcuts/okr/okr_patch.go b/shortcuts/okr/okr_patch.go new file mode 100644 index 000000000..2ccb21ab8 --- /dev/null +++ b/shortcuts/okr/okr_patch.go @@ -0,0 +1,311 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package okr + +import ( + "context" + "encoding/json" + "fmt" + "io" + "math" + "strconv" + "strings" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/shortcuts/common" +) + +// patchParams holds the parsed parameters for the patch operation. +type patchParams struct { + Level string + TargetID string + Style string + Content *ContentBlock + Notes *ContentBlock + Score *float64 + Deadline *string + UserIDType string +} + +// parsePatchParams parses and validates flags from runtime into request-ready parameters. +func parsePatchParams(runtime *common.RuntimeContext) (*patchParams, error) { + p := &patchParams{ + Level: runtime.Str("level"), + TargetID: runtime.Str("target-id"), + Style: runtime.Str("style"), + UserIDType: runtime.Str("user-id-type"), + } + + hasField := false + + // Parse content if provided + if contentStr := runtime.Str("content"); contentStr != "" { + hasField = true + if err := common.RejectDangerousCharsTyped("--content", contentStr); err != nil { + return nil, err + } + if p.Style == "simple" { + var sp SemiPlainContent + if err := json.Unmarshal([]byte(contentStr), &sp); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid semi-plain JSON: {\"text\":\"...\",\"mention\":[\"...\"]}: %s", err).WithParam("--content").WithCause(err) + } + if strings.TrimSpace(sp.Text) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content text is required and cannot be empty").WithParam("--content") + } + for i, m := range sp.Mention { + if strings.TrimSpace(m) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content mention[%d] cannot be empty", i).WithParam("--content") + } + } + if len(sp.Docs) > 0 || len(sp.Images) > 0 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content docs and images are not supported in simple style input; use richtext style or remove these fields").WithParam("--content") + } + p.Content = sp.ToContentBlock() + } else { + var cb ContentBlock + if err := json.Unmarshal([]byte(contentStr), &cb); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + } + p.Content = &cb + } + } + + // Parse notes if provided (only for objective) + if notesStr := runtime.Str("notes"); notesStr != "" { + hasField = true + if err := common.RejectDangerousCharsTyped("--notes", notesStr); err != nil { + return nil, err + } + if p.Level != "objective" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--notes is only supported for level=objective").WithParam("--notes") + } + if p.Style == "simple" { + var sp SemiPlainContent + if err := json.Unmarshal([]byte(notesStr), &sp); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--notes must be valid semi-plain JSON: {\"text\":\"...\",\"mention\":[\"...\"]}: %s", err).WithParam("--notes").WithCause(err) + } + if strings.TrimSpace(sp.Text) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--notes text is required and cannot be empty").WithParam("--notes") + } + for i, m := range sp.Mention { + if strings.TrimSpace(m) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--notes mention[%d] cannot be empty", i).WithParam("--notes") + } + } + if len(sp.Docs) > 0 || len(sp.Images) > 0 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--notes docs and images are not supported in simple style input; use richtext style or remove these fields").WithParam("--notes") + } + p.Notes = sp.ToContentBlock() + } else { + var cb ContentBlock + if err := json.Unmarshal([]byte(notesStr), &cb); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--notes must be valid ContentBlock JSON: %s", err).WithParam("--notes").WithCause(err) + } + p.Notes = &cb + } + } + + // Parse score if provided + if scoreStr := runtime.Str("score"); scoreStr != "" { + hasField = true + score, err := strconv.ParseFloat(scoreStr, 64) + if err != nil || math.IsNaN(score) || math.IsInf(score, 0) { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--score must be a valid number").WithParam("--score") + } + if score < 0 || score > 1 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--score must be between 0 and 1").WithParam("--score") + } + // Check for exactly one decimal place + scoreStrTrimmed := strings.TrimRight(strings.TrimRight(scoreStr, "0"), ".") + parts := strings.Split(scoreStrTrimmed, ".") + if len(parts) == 2 && len(parts[1]) > 1 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--score must have at most one decimal place (e.g., 0.5, not 0.51)").WithParam("--score") + } + // Validation ensures at most one decimal place, so score is already correctly formatted + p.Score = &score + } + + // Parse deadline if provided + if deadlineStr := runtime.Str("deadline"); deadlineStr != "" { + hasField = true + deadlineMs, err := strconv.ParseInt(deadlineStr, 10, 64) + if err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--deadline must be a valid millisecond timestamp (integer)").WithParam("--deadline") + } + if deadlineMs <= 0 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--deadline must be a positive millisecond timestamp").WithParam("--deadline") + } + // Reject non-millisecond timestamps: year 2000 in ms is ~946e9, year 2100 in ms is ~4.1e12 + // Anything less than 1e12 is likely seconds or a wrong unit + if deadlineMs < 1000000000000 { // 1e12 ms = year ~33658, so use 1e12 as lower bound for reasonable ms timestamps + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--deadline must be a millisecond timestamp (13 digits), not seconds").WithParam("--deadline") + } + p.Deadline = &deadlineStr + } + + // At least one field must be provided + if !hasField { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "at least one of --content, --notes, --score, or --deadline must be provided") + } + + return p, nil +} + +// OKRPatch patches an objective or key result. +var OKRPatch = common.Shortcut{ + Service: "okr", + Command: "+patch", + Description: "Patch an OKR objective or key result (content, notes, score, deadline)", + Risk: "write", + Scopes: []string{"okr:okr.content:writeonly"}, + AuthTypes: []string{"user", "bot"}, + HasFormat: true, + Flags: []common.Flag{ + {Name: "level", Desc: "patch level: objective | key-result", Required: true, Enum: []string{"objective", "key-result"}}, + {Name: "target-id", Desc: "target ID (objective or key result ID)", Required: true}, + {Name: "style", Default: "simple", Desc: "input style for content/notes: simple (semi-plain text JSON) | richtext (ContentBlock JSON)", Enum: []string{"simple", "richtext"}}, + {Name: "content", Desc: "content: semi-plain JSON {\"text\":\"...\",\"mention\":[\"...\"]} (simple) or ContentBlock JSON (richtext)", Input: []string{common.File, common.Stdin}}, + {Name: "notes", Desc: "notes (objective only): semi-plain JSON {\"text\":\"...\",\"mention\":[\"...\"]} (simple) or ContentBlock JSON (richtext)", Input: []string{common.File, common.Stdin}}, + {Name: "score", Desc: "score value between 0 and 1, with at most one decimal place (e.g., 0.5)"}, + {Name: "deadline", Desc: "deadline as millisecond timestamp"}, + {Name: "user-id-type", Default: "open_id", Desc: "user ID type: open_id | union_id | user_id"}, + }, + Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { + level := runtime.Str("level") + if level != "objective" && level != "key-result" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--level must be one of: objective | key-result").WithParam("--level") + } + + targetID := runtime.Str("target-id") + if targetID == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--target-id is required").WithParam("--target-id") + } + if err := common.RejectDangerousCharsTyped("--target-id", targetID); err != nil { + return err + } + if id, err := strconv.ParseInt(targetID, 10, 64); err != nil || id <= 0 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--target-id must be a positive int64").WithParam("--target-id") + } + + style := runtime.Str("style") + if style != "simple" && style != "richtext" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--style must be one of: simple | richtext").WithParam("--style") + } + + idType := runtime.Str("user-id-type") + if idType != "open_id" && idType != "union_id" && idType != "user_id" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--user-id-type must be one of: open_id | union_id | user_id").WithParam("--user-id-type") + } + + // Delegate content/notes/score/deadline validation to parsePatchParams + if _, err := parsePatchParams(runtime); err != nil { + return err + } + + return nil + }, + DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { + p, err := parsePatchParams(runtime) + if err != nil { + return common.NewDryRunAPI(). + PATCH(""). + Desc(fmt.Sprintf("Dry-run skipped: %s", err.Error())) + } + + body := make(map[string]interface{}) + if p.Content != nil { + body["content"] = p.Content + } + if p.Notes != nil { + body["notes"] = p.Notes + } + if p.Score != nil { + body["score"] = *p.Score + } + if p.Deadline != nil { + body["deadline"] = *p.Deadline + } + + params := map[string]interface{}{ + "user_id_type": p.UserIDType, + } + + api := common.NewDryRunAPI() + if p.Level == "objective" { + api = api.PATCH("/open-apis/okr/v2/objectives/:objective_id"). + Set("objective_id", p.TargetID) + } else { + api = api.PATCH("/open-apis/okr/v2/key_results/:key_result_id"). + Set("key_result_id", p.TargetID) + } + return api.Params(params).Body(body). + Desc(fmt.Sprintf("Patch OKR %s: content=%v, notes=%v, score=%v, deadline=%v", + p.Level, p.Content != nil, p.Notes != nil, p.Score != nil, p.Deadline != nil)) + }, + Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { + p, err := parsePatchParams(runtime) + if err != nil { + return err + } + + body := make(map[string]interface{}) + if p.Content != nil { + body["content"] = p.Content + } + if p.Notes != nil { + body["notes"] = p.Notes + } + if p.Score != nil { + body["score"] = *p.Score + } + if p.Deadline != nil { + body["deadline"] = *p.Deadline + } + + queryParams := map[string]interface{}{ + "user_id_type": p.UserIDType, + } + + var path string + if p.Level == "objective" { + path = fmt.Sprintf("/open-apis/okr/v2/objectives/%s", p.TargetID) + } else { + path = fmt.Sprintf("/open-apis/okr/v2/key_results/%s", p.TargetID) + } + + _, err = runtime.CallAPITyped("PATCH", path, queryParams, body) + if err != nil { + return wrapOkrNetworkErr(err, "failed to patch OKR %s", p.Level) + } + + result := map[string]interface{}{ + "level": p.Level, + "target_id": p.TargetID, + "patched": map[string]bool{ + "content": p.Content != nil, + "notes": p.Notes != nil, + "score": p.Score != nil, + "deadline": p.Deadline != nil, + }, + } + + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Patched OKR %s [%s]\n", p.Level, p.TargetID) + if p.Content != nil { + fmt.Fprintf(w, " - content: updated\n") + } + if p.Notes != nil { + fmt.Fprintf(w, " - notes: updated\n") + } + if p.Score != nil { + fmt.Fprintf(w, " - score: %.1f\n", *p.Score) + } + if p.Deadline != nil { + fmt.Fprintf(w, " - deadline: %s\n", formatTimestamp(*p.Deadline)) + } + }) + + return nil + }, +} diff --git a/shortcuts/okr/okr_patch_test.go b/shortcuts/okr/okr_patch_test.go new file mode 100644 index 000000000..937bffa5d --- /dev/null +++ b/shortcuts/okr/okr_patch_test.go @@ -0,0 +1,1350 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package okr + +import ( + "bytes" + "encoding/json" + "errors" + "strings" + "testing" + + "github.com/larksuite/cli/errs" + "github.com/larksuite/cli/internal/cmdutil" + "github.com/larksuite/cli/internal/core" + "github.com/larksuite/cli/internal/httpmock" + "github.com/spf13/cobra" +) + +func patchTestConfig(t *testing.T) *core.CliConfig { + t.Helper() + return &core.CliConfig{ + AppID: "dummy", + AppSecret: "dummy", + Brand: core.BrandFeishu, + } +} + +func runPatchShortcut(t *testing.T, f *cmdutil.Factory, stdout *bytes.Buffer, args []string) error { + t.Helper() + parent := &cobra.Command{Use: "okr"} + OKRPatch.Mount(parent, f) + parent.SetArgs(args) + parent.SilenceErrors = true + parent.SilenceUsage = true + if stdout != nil { + stdout.Reset() + } + return parent.Execute() +} + +// --- Validate tests --- + +func TestPatchValidate_MissingLevel(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--target-id", "123", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected --level required error") + } + // Cobra required flag errors are not our typed errors, so check message + if !strings.Contains(err.Error(), "level") { + t.Fatalf("expected --level required error, got: %v", err) + } +} + +func TestPatchValidate_MissingTargetID(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected --target-id required error") + } + // Cobra required flag errors are not our typed errors, so check message + if !strings.Contains(err.Error(), "target-id") { + t.Fatalf("expected --target-id required error, got: %v", err) + } +} + +func TestPatchValidate_InvalidLevel(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "invalid", + "--target-id", "123", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected error for invalid level") + } + _, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--level" { + t.Fatalf("expected param --level, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidTargetID_NonNumeric(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "not-a-number", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected error for invalid target-id") + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--target-id" { + t.Fatalf("expected param --target-id, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidTargetID_Negative(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "-1", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected error for negative target-id") + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--target-id" { + t.Fatalf("expected param --target-id, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidTargetID_Zero(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "0", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected error for zero target-id") + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--target-id" { + t.Fatalf("expected param --target-id, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidStyle(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "invalid", + "--content", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected error for invalid style") + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--style" { + t.Fatalf("expected param --style, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidUserIDType(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--content", validSemiPlainJSON, + "--user-id-type", "invalid", + }) + if err == nil { + t.Fatal("expected error for invalid user-id-type") + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--user-id-type" { + t.Fatalf("expected param --user-id-type, got %q", validationErr.Param) + } +} + +func TestPatchValidate_NoFieldsProvided(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + }) + if err == nil { + t.Fatal("expected error for no fields provided") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "" { + t.Fatalf("expected empty param (error not tied to a specific field), got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "at least one of") { + t.Fatalf("expected 'at least one of' error message, got: %v", err) + } +} + +func TestPatchValidate_InvalidContent_SimpleStyle(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", "not-json", + }) + if err == nil { + t.Fatal("expected error for invalid --content JSON") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param --content, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "semi-plain JSON") { + t.Fatalf("expected semi-plain JSON error, got: %v", err) + } +} + +func TestPatchValidate_InvalidContent_RichTextStyle(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "richtext", + "--content", "not-json", + }) + if err == nil { + t.Fatal("expected error for invalid --content JSON") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param --content, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "ContentBlock JSON") { + t.Fatalf("expected ContentBlock JSON error, got: %v", err) + } +} + +func TestPatchValidate_SemiPlainContent_EmptyText(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", `{"text":" ","mention":[]}`, + }) + if err == nil { + t.Fatal("expected error for empty text in content") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param --content, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "text is required") { + t.Fatalf("expected text required error, got: %v", err) + } +} + +func TestPatchValidate_SemiPlainContent_EmptyMention(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", `{"text":"hello","mention":[""]}`, + }) + if err == nil { + t.Fatal("expected error for empty mention in content") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param --content, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "mention[0] cannot be empty") { + t.Fatalf("expected mention empty error, got: %v", err) + } +} + +func TestPatchValidate_SemiPlainContent_WithDocs(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", `{"text":"hello","docs":[{"title":"doc","url":"https://example.com"}]}`, + }) + if err == nil { + t.Fatal("expected error for docs in simple style content") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param --content, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "docs and images are not supported") { + t.Fatalf("expected docs/images not supported error, got: %v", err) + } +} + +func TestPatchValidate_SemiPlainContent_WithImages(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", `{"text":"hello","images":["https://example.com/img.png"]}`, + }) + if err == nil { + t.Fatal("expected error for images in simple style content") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param --content, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "docs and images are not supported") { + t.Fatalf("expected docs/images not supported error, got: %v", err) + } +} + +func TestPatchValidate_NotesForbiddenOnKeyResult(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "123", + "--notes", validSemiPlainJSON, + }) + if err == nil { + t.Fatal("expected error for notes on key-result") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--notes" { + t.Fatalf("expected param --notes, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "only supported for level=objective") { + t.Fatalf("expected notes only for objective error, got: %v", err) + } +} + +func TestPatchValidate_InvalidNotes_SimpleStyle(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--notes", "not-json", + }) + if err == nil { + t.Fatal("expected error for invalid --notes JSON") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--notes" { + t.Fatalf("expected param --notes, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidNotes_RichTextStyle(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "richtext", + "--notes", "not-json", + }) + if err == nil { + t.Fatal("expected error for invalid --notes JSON") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--notes" { + t.Fatalf("expected param --notes, got %q", validationErr.Param) + } +} + +func TestPatchValidate_SemiPlainNotes_EmptyText(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--notes", `{"text":" "}`, + }) + if err == nil { + t.Fatal("expected error for empty text in notes") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--notes" { + t.Fatalf("expected param --notes, got %q", validationErr.Param) + } +} + +func TestPatchValidate_SemiPlainNotes_EmptyMention(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--notes", `{"text":"hello","mention":[" "]}`, + }) + if err == nil { + t.Fatal("expected error for empty mention in notes") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--notes" { + t.Fatalf("expected param --notes, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidScore_NonNumeric(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "not-a-number", + }) + if err == nil { + t.Fatal("expected error for invalid score") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--score" { + t.Fatalf("expected param --score, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidScore_OutOfRange(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "1.5", + }) + if err == nil { + t.Fatal("expected error for score out of range") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--score" { + t.Fatalf("expected param --score, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "between 0 and 1") { + t.Fatalf("expected between 0 and 1 error, got: %v", err) + } +} + +func TestPatchValidate_InvalidScore_Negative(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "-0.1", + }) + if err == nil { + t.Fatal("expected error for negative score") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--score" { + t.Fatalf("expected param --score, got %q", validationErr.Param) + } +} + +func TestPatchValidate_InvalidScore_TooManyDecimals(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "0.51", + }) + if err == nil { + t.Fatal("expected error for score with too many decimals") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--score" { + t.Fatalf("expected param --score, got %q", validationErr.Param) + } + if !strings.Contains(err.Error(), "at most one decimal place") { + t.Fatalf("expected one decimal place error, got: %v", err) + } +} + +func TestPatchValidate_InvalidDeadline(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--deadline", "not-a-number", + }) + if err == nil { + t.Fatal("expected error for invalid deadline") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--deadline" { + t.Fatalf("expected param --deadline, got %q", validationErr.Param) + } +} + +func TestPatchValidate_Valid_Objective_SimpleStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", validSemiPlainJSON, + "--notes", validSemiPlainJSON, + "--score", "0.5", + "--deadline", "1735776000000", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestPatchValidate_Valid_Objective_RichTextStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "richtext", + "--content", validContentBlockJSON, + "--notes", validContentBlockJSON, + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestPatchValidate_Valid_KeyResult_SimpleStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/key_results/456", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "456", + "--style", "simple", + "--content", validSemiPlainJSON, + "--score", "1.0", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestPatchValidate_Valid_KeyResult_RichTextStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/key_results/456", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "456", + "--style", "richtext", + "--content", validContentBlockJSON, + "--deadline", "1735776000000", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestPatchValidate_Valid_ScoreBoundaryValues(t *testing.T) { + t.Parallel() + tests := []string{"0", "0.0", "1", "1.0", "0.3", "0.7"} + for _, score := range tests { + t.Run(score, func(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", score, + }) + if err != nil { + t.Fatalf("unexpected error for score %q: %v", score, err) + } + }) + } +} + +func TestPatchValidate_Valid_DefaultStyleIsSimple(t *testing.T) { + t.Parallel() + // Default style is simple, so passing semi-plain JSON without --style should work + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--content", validSemiPlainJSON, + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestPatchValidate_Valid_OnlyScore(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "0.0", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestPatchValidate_Valid_OnlyDeadline(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--deadline", "1735776000000", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +// --- DryRun tests --- + +func TestPatchDryRun_Objective_Content(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", validSemiPlainJSON, + "--dry-run", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, "PATCH") { + t.Fatalf("expected PATCH method in dry-run output, got: %s", output) + } + if !strings.Contains(output, "/open-apis/okr/v2/objectives/123") { + t.Fatalf("expected objective URL in dry-run output, got: %s", output) + } + if !strings.Contains(output, "content=true") { + t.Fatalf("expected content=true in dry-run output, got: %s", output) + } +} + +func TestPatchDryRun_KeyResult_Score(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "456", + "--score", "0.7", + "--dry-run", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, "PATCH") { + t.Fatalf("expected PATCH method in dry-run output, got: %s", output) + } + if !strings.Contains(output, "/open-apis/okr/v2/key_results/456") { + t.Fatalf("expected key_result URL in dry-run output, got: %s", output) + } + if !strings.Contains(output, "score=true") { + t.Fatalf("expected score=true in dry-run output, got: %s", output) + } +} + +func TestPatchDryRun_Objective_MultipleFields(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "789", + "--style", "simple", + "--content", validSemiPlainJSON, + "--notes", validSemiPlainJSON, + "--score", "0.5", + "--deadline", "1735776000000", + "--dry-run", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, "content=true") || + !strings.Contains(output, "notes=true") || + !strings.Contains(output, "score=true") || + !strings.Contains(output, "deadline=true") { + t.Fatalf("expected all fields in dry-run output, got: %s", output) + } + if !strings.Contains(output, `"user_id_type": "open_id"`) { + t.Fatalf("expected user_id_type param in dry-run output, got: %s", output) + } +} + +func TestPatchDryRun_KeyResult_WithUserIDType(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, patchTestConfig(t)) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "456", + "--score", "0.7", + "--user-id-type", "user_id", + "--dry-run", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, `"user_id_type": "user_id"`) { + t.Fatalf("expected user_id_type=user_id in dry-run output, got: %s", output) + } +} + +// --- Execute tests --- + +func TestPatchExecute_Objective_Success(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + BodyFilter: func(body []byte) bool { + var data map[string]interface{} + if err := json.Unmarshal(body, &data); err != nil { + return false + } + // Check content is present and is a ContentBlock structure + content, ok := data["content"].(map[string]interface{}) + if !ok { + return false + } + blocks, ok := content["blocks"].([]interface{}) + if !ok || len(blocks) == 0 { + return false + } + // Check score + score, ok := data["score"].(float64) + if !ok || score != 0.5 { + return false + } + // Check notes + notes, ok := data["notes"].(map[string]interface{}) + if !ok { + return false + } + notesBlocks, ok := notes["blocks"].([]interface{}) + if !ok || len(notesBlocks) == 0 { + return false + } + // Check deadline + deadline, ok := data["deadline"].(string) + if !ok || deadline != "1735776000000" { + return false + } + return true + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--style", "simple", + "--content", validSemiPlainJSON, + "--notes", validSemiPlainJSON, + "--score", "0.5", + "--deadline", "1735776000000", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, `"level": "objective"`) { + t.Fatalf("expected objective level in output, got: %s", output) + } + if !strings.Contains(output, `"target_id": "123"`) { + t.Fatalf("expected target_id in output, got: %s", output) + } + if !strings.Contains(output, `"content": true`) || + !strings.Contains(output, `"notes": true`) || + !strings.Contains(output, `"score": true`) || + !strings.Contains(output, `"deadline": true`) { + t.Fatalf("expected all field patches in output, got: %s", output) + } +} + +func TestPatchExecute_KeyResult_Success(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/key_results/456", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + BodyFilter: func(body []byte) bool { + var data map[string]interface{} + if err := json.Unmarshal(body, &data); err != nil { + return false + } + // Check content is present + content, ok := data["content"].(map[string]interface{}) + if !ok { + return false + } + blocks, ok := content["blocks"].([]interface{}) + if !ok || len(blocks) == 0 { + return false + } + // Check score + score, ok := data["score"].(float64) + if !ok || score != 1.0 { + return false + } + // Notes should NOT be present for key-result + if _, hasNotes := data["notes"]; hasNotes { + return false + } + return true + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "456", + "--style", "richtext", + "--content", validContentBlockJSON, + "--score", "1.0", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, `"level": "key-result"`) { + t.Fatalf("expected key-result level in output, got: %s", output) + } + if !strings.Contains(output, `"target_id": "456"`) { + t.Fatalf("expected target_id in output, got: %s", output) + } + if !strings.Contains(output, `"content": true`) || + !strings.Contains(output, `"score": true`) { + t.Fatalf("expected field patches in output, got: %s", output) + } + if strings.Contains(output, `"notes": true`) { + t.Fatalf("unexpected notes patch in key-result output, got: %s", output) + } +} + +func TestPatchExecute_OnlyScore(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + BodyFilter: func(body []byte) bool { + var data map[string]interface{} + if err := json.Unmarshal(body, &data); err != nil { + return false + } + // Only score should be present + if _, hasContent := data["content"]; hasContent { + return false + } + if _, hasNotes := data["notes"]; hasNotes { + return false + } + if _, hasDeadline := data["deadline"]; hasDeadline { + return false + } + score, ok := data["score"].(float64) + return ok && score == 0.3 + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "0.3", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, `"score": true`) { + t.Fatalf("expected score patch in output, got: %s", output) + } + if strings.Contains(output, `"content": true`) || + strings.Contains(output, `"notes": true`) || + strings.Contains(output, `"deadline": true`) { + t.Fatalf("unexpected field patches in output, got: %s", output) + } +} + +func TestPatchExecute_APIError(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 9999, + "msg": "patch error", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "0.5", + }) + if err == nil { + t.Fatal("expected error for API failure") + } + prob, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if prob.Category != errs.CategoryAPI { + t.Fatalf("expected CategoryAPI, got %q", prob.Category) + } + var apiErr *errs.APIError + if !errors.As(err, &apiErr) { + t.Fatalf("expected error to be *errs.APIError, got: %T", err) + } + if !errors.Is(err, apiErr) { + t.Fatal("errors.Is should find the APIError in the chain") + } +} + +func TestPatchExecute_WithUserIDType(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/key_results/789", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "key-result", + "--target-id", "789", + "--score", "0.8", + "--user-id-type", "union_id", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} + +// --- parsePatchParams tests --- + +func TestParsePatchParams_ScoreRounding(t *testing.T) { + t.Parallel() + // Valid score with one decimal place is accepted (score 0.3) + f, stdout, _, reg := cmdutil.TestFactory(t, patchTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PATCH", + URL: "/open-apis/okr/v2/objectives/123", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + }, + BodyFilter: func(body []byte) bool { + var data map[string]interface{} + if err := json.Unmarshal(body, &data); err != nil { + return false + } + score, ok := data["score"].(float64) + // 0.33 should round to 0.3 + return ok && score == 0.3 + }, + }) + err := runPatchShortcut(t, f, stdout, []string{ + "+patch", + "--level", "objective", + "--target-id", "123", + "--score", "0.3", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } +} diff --git a/shortcuts/okr/okr_progress_create.go b/shortcuts/okr/okr_progress_create.go index 62d976a2b..3a56d5d9d 100644 --- a/shortcuts/okr/okr_progress_create.go +++ b/shortcuts/okr/okr_progress_create.go @@ -10,6 +10,7 @@ import ( "io" "math" "strconv" + "strings" "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/core" @@ -35,12 +36,37 @@ type createProgressRecordParams struct { // parseCreateProgressRecordParams parses and validates flags from runtime into request-ready parameters. func parseCreateProgressRecordParams(runtime *common.RuntimeContext) (*createProgressRecordParams, error) { + style := runtime.Str("style") content := runtime.Str("content") - var cb ContentBlock - if err := json.Unmarshal([]byte(content), &cb); err != nil { - return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + var contentV1 *ContentBlockV1 + + if style == "simple" { + var sp SemiPlainContent + if err := json.Unmarshal([]byte(content), &sp); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid semi-plain JSON: {\"text\":\"...\",\"mention\":[\"...\"]}: %s", err).WithParam("--content").WithCause(err) + } + if strings.TrimSpace(sp.Text) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content text is required and cannot be empty").WithParam("--content") + } + // Validate mention IDs are non-empty + for i, m := range sp.Mention { + if strings.TrimSpace(m) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content mention[%d] cannot be empty", i).WithParam("--content") + } + } + if len(sp.Docs) > 0 || len(sp.Images) > 0 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content docs and images are not supported in simple style input; use richtext style or remove these fields").WithParam("--content") + } + // Build ContentBlock from semi-plain content (text + mentions) + contentV1 = sp.ToContentBlock().ToV1() + } else { + // richtext mode + var cb ContentBlock + if err := json.Unmarshal([]byte(content), &cb); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + } + contentV1 = cb.ToV1() } - contentV1 := cb.ToV1() targetType := runtime.Str("target-type") targetTypeVal := targetTypeAllowed[targetType] @@ -92,7 +118,7 @@ var OKRCreateProgressRecord = common.Shortcut{ AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ - {Name: "content", Desc: "progress content in ContentBlock JSON format", Required: true, Input: []string{common.File, common.Stdin}}, + {Name: "content", Desc: "progress content: semi-plain JSON {\"text\":\"...\",\"mention\":[\"...\"]} (simple style) or ContentBlock JSON (richtext style)", Required: true, Input: []string{common.File, common.Stdin}}, {Name: "target-id", Desc: "target ID (objective or key result ID)", Required: true}, {Name: "target-type", Desc: "target type: objective | key_result", Required: true, Enum: []string{"objective", "key_result"}}, {Name: "progress-percent", Desc: "progress percentage"}, @@ -100,6 +126,7 @@ var OKRCreateProgressRecord = common.Shortcut{ {Name: "source-title", Default: "created by lark-cli", Desc: "source title for display"}, {Name: "source-url", Desc: "source URL for display (defaults to open platform URL based on brand)"}, {Name: "user-id-type", Default: "open_id", Desc: "user ID type: open_id | union_id | user_id"}, + {Name: "style", Default: "simple", Desc: "input style: simple (semi-plain text JSON) | richtext (ContentBlock JSON)", Enum: []string{"simple", "richtext"}}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { content := runtime.Str("content") @@ -109,10 +136,36 @@ var OKRCreateProgressRecord = common.Shortcut{ if err := common.RejectDangerousCharsTyped("--content", content); err != nil { return err } - // Validate content is valid JSON and can be parsed as ContentBlock - var cb ContentBlock - if err := json.Unmarshal([]byte(content), &cb); err != nil { - return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + + style := runtime.Str("style") + if style != "simple" && style != "richtext" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--style must be one of: simple | richtext").WithParam("--style") + } + + // Validate content based on style + if style == "simple" { + var sp SemiPlainContent + if err := json.Unmarshal([]byte(content), &sp); err != nil { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid semi-plain JSON: {\"text\":\"...\",\"mention\":[\"...\"]}: %s", err).WithParam("--content").WithCause(err) + } + if strings.TrimSpace(sp.Text) == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content text is required and cannot be empty").WithParam("--content") + } + for i, m := range sp.Mention { + if strings.TrimSpace(m) == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content mention[%d] cannot be empty", i).WithParam("--content") + } + } + // If user provided docs or images in simple mode, warn that they are ignored + if len(sp.Docs) > 0 || len(sp.Images) > 0 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content docs and images are not supported in simple style input; use richtext style or remove these fields").WithParam("--content") + } + } else { + // richtext mode + var cb ContentBlock + if err := json.Unmarshal([]byte(content), &cb); err != nil { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + } } targetID := runtime.Str("target-id") @@ -213,21 +266,43 @@ var OKRCreateProgressRecord = common.Shortcut{ return err } - resp := record.ToResp() - result := map[string]interface{}{ - "progress": resp, - } + style := runtime.Str("style") + var result map[string]interface{} + if style == "simple" { + resp := record.ToSimple() + result = map[string]interface{}{ + "progress": resp, + "style": style, + } - runtime.OutFormat(result, nil, func(w io.Writer) { - fmt.Fprintf(w, "Created Progress [%s]\n", resp.ID) - fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) - if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { - fmt.Fprintf(w, " ProgressRate: %.1f%%\n", *resp.ProgressRate.Percent) + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Created Progress [%s] (style: %s)\n", resp.ID, style) + fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) + if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { + fmt.Fprintf(w, " ProgressRate: %.1f%%\n", *resp.ProgressRate.Percent) + } + if resp.Content != nil { + fmt.Fprintf(w, " Content: %s\n", resp.Content.Text) + } + }) + } else { + resp := record.ToResp() + result = map[string]interface{}{ + "progress": resp, + "style": style, } - if resp.Content != nil { - fmt.Fprintf(w, " Content: %s\n", *resp.Content) - } - }) + + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Created Progress [%s] (style: %s)\n", resp.ID, style) + fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) + if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { + fmt.Fprintf(w, " ProgressRate: %.1f%%\n", *resp.ProgressRate.Percent) + } + if resp.Content != nil { + fmt.Fprintf(w, " Content: %s\n", *resp.Content) + } + }) + } return nil }, } diff --git a/shortcuts/okr/okr_progress_create_test.go b/shortcuts/okr/okr_progress_create_test.go index 87b266612..ba5c19994 100644 --- a/shortcuts/okr/okr_progress_create_test.go +++ b/shortcuts/okr/okr_progress_create_test.go @@ -5,11 +5,13 @@ package okr import ( "bytes" + "errors" "strings" "testing" "github.com/spf13/cobra" + "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/cmdutil" "github.com/larksuite/cli/internal/core" "github.com/larksuite/cli/internal/httpmock" @@ -38,6 +40,7 @@ func runProgressCreateShortcut(t *testing.T, f *cmdutil.Factory, stdout *bytes.B } const validContentBlockJSON = `{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"test content"}}]}}]}` +const validSemiPlainJSON = `{"text":"test content","mention":["ou_123"]}` // --- Validate tests --- @@ -60,6 +63,7 @@ func TestProgressCreateValidate_InvalidContentJSON(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", "not-json", + "--style", "richtext", "--target-id", "123", "--target-type", "objective", }) @@ -77,6 +81,7 @@ func TestProgressCreateValidate_MissingTargetID(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-type", "objective", }) if err == nil { @@ -90,6 +95,7 @@ func TestProgressCreateValidate_InvalidTargetID_NonNumeric(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "abc", "--target-type", "objective", }) @@ -107,6 +113,7 @@ func TestProgressCreateValidate_InvalidTargetType(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "invalid", }) @@ -124,6 +131,7 @@ func TestProgressCreateValidate_ControlCharsInContent(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", "{\"blocks\":[{\"block_element_type\":\"para\tgraph\"}]}", + "--style", "richtext", "--target-id", "123", "--target-type", "objective", }) @@ -138,6 +146,7 @@ func TestProgressCreateValidate_InvalidUserIDType(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", "--user-id-type", "invalid", @@ -153,6 +162,7 @@ func TestProgressCreateValidate_InvalidProgressPercent_OutOfRange(t *testing.T) err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", "--progress-percent", "999999999999", @@ -171,6 +181,7 @@ func TestProgressCreateValidate_InvalidProgressPercent_NonNumeric(t *testing.T) err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", "--progress-percent", "abc", @@ -189,6 +200,7 @@ func TestProgressCreateValidate_InvalidProgressStatus(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", "--progress-status", "invalid_status", @@ -219,6 +231,7 @@ func TestProgressCreateValidate_Valid(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", }) @@ -235,6 +248,7 @@ func TestProgressCreateDryRun(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", "--dry-run", @@ -264,6 +278,7 @@ func TestProgressCreateDryRun_WithProgressRate(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "123", "--target-type", "objective", "--progress-percent", "75", @@ -299,6 +314,7 @@ func TestProgressCreateExecute_Success(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "456", "--target-type", "key_result", }) @@ -330,6 +346,7 @@ func TestProgressCreateExecute_APIError(t *testing.T) { err := runProgressCreateShortcut(t, f, stdout, []string{ "+progress-create", "--content", validContentBlockJSON, + "--style", "richtext", "--target-id", "789", "--target-type", "objective", }) @@ -337,3 +354,200 @@ func TestProgressCreateExecute_APIError(t *testing.T) { t.Fatal("expected error for API failure") } } + +// --- Simple mode tests --- + +func TestProgressCreateExecute_SimpleMode_DefaultStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, progressCreateTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "POST", + URL: "/open-apis/okr/v1/progress_records/", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "progress_id": "300", + "modify_time": "1735776000000", + }, + }, + }) + // Use default style (simple) without specifying --style + err := runProgressCreateShortcut(t, f, stdout, []string{ + "+progress-create", + "--content", validSemiPlainJSON, + "--target-id", "123", + "--target-type", "objective", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + data := decodeEnvelope(t, stdout) + pr, _ := data["progress"].(map[string]interface{}) + if pr == nil { + t.Fatal("expected progress in output") + } + if pr["progress_id"] != "300" { + t.Fatalf("progress_id = %v, want 300", pr["progress_id"]) + } +} + +func TestProgressCreateExecute_SimpleMode_ExplicitStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, progressCreateTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "POST", + URL: "/open-apis/okr/v1/progress_records/", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "progress_id": "400", + "modify_time": "1735776000000", + }, + }, + }) + // Explicitly specify --style simple with mentions + err := runProgressCreateShortcut(t, f, stdout, []string{ + "+progress-create", + "--content", `{"text":"simple progress with mention","mention":["ou_abc","ou_def"]}`, + "--style", "simple", + "--target-id", "456", + "--target-type", "key_result", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + data := decodeEnvelope(t, stdout) + pr, _ := data["progress"].(map[string]interface{}) + if pr == nil { + t.Fatal("expected progress in output") + } + if pr["progress_id"] != "400" { + t.Fatalf("progress_id = %v, want 400", pr["progress_id"]) + } +} + +func TestProgressCreateValidate_SimpleMode_InvalidSemiPlainJSON(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressCreateTestConfig(t)) + err := runProgressCreateShortcut(t, f, stdout, []string{ + "+progress-create", + "--content", `{"text":"missing closing brace`, + "--target-id", "123", + "--target-type", "objective", + }) + if err == nil { + t.Fatal("expected error for invalid semi-plain JSON") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param %q, got %q", "--content", validationErr.Param) + } + if !strings.Contains(err.Error(), "--content must be valid semi-plain JSON") { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestProgressCreateValidate_SimpleMode_EmptyText(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressCreateTestConfig(t)) + err := runProgressCreateShortcut(t, f, stdout, []string{ + "+progress-create", + "--content", `{"text":" ","mention":[]}`, + "--target-id", "123", + "--target-type", "objective", + }) + if err == nil { + t.Fatal("expected error for empty text in simple mode") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param %q, got %q", "--content", validationErr.Param) + } + if !strings.Contains(err.Error(), "--content text is required and cannot be empty") { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestProgressCreateValidate_SimpleMode_DocsImagesNotSupported(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressCreateTestConfig(t)) + err := runProgressCreateShortcut(t, f, stdout, []string{ + "+progress-create", + "--content", `{"text":"has docs","mention":[],"docs":[{"title":"doc","url":"https://example.com"}]}`, + "--target-id", "123", + "--target-type", "objective", + }) + if err == nil { + t.Fatal("expected error for docs in simple mode") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param %q, got %q", "--content", validationErr.Param) + } + if !strings.Contains(err.Error(), "docs and images are not supported in simple style input") { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestProgressCreateDryRun_SimpleMode(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressCreateTestConfig(t)) + err := runProgressCreateShortcut(t, f, stdout, []string{ + "+progress-create", + "--content", validSemiPlainJSON, + "--target-id", "123", + "--target-type", "objective", + "--dry-run", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, "/open-apis/okr/v1/progress_records/") { + t.Fatalf("dry-run output should contain API path, got: %s", output) + } + if !strings.Contains(output, "POST") { + t.Fatalf("dry-run output should contain POST method, got: %s", output) + } +} diff --git a/shortcuts/okr/okr_progress_get.go b/shortcuts/okr/okr_progress_get.go index 2878f0ef1..e98e0944a 100644 --- a/shortcuts/okr/okr_progress_get.go +++ b/shortcuts/okr/okr_progress_get.go @@ -26,6 +26,7 @@ var OKRGetProgressRecord = common.Shortcut{ Flags: []common.Flag{ {Name: "progress-id", Desc: "progress ID (int64)", Required: true}, {Name: "user-id-type", Default: "open_id", Desc: "user ID type: open_id | union_id | user_id"}, + {Name: "style", Default: "simple", Desc: "output style: simple (semi-plain text JSON) | richtext (ContentBlock JSON)", Enum: []string{"simple", "richtext"}}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { progressID := runtime.Str("progress-id") @@ -39,6 +40,10 @@ var OKRGetProgressRecord = common.Shortcut{ if idType != "open_id" && idType != "union_id" && idType != "user_id" { return errs.NewValidationError(errs.SubtypeInvalidArgument, "--user-id-type must be one of: open_id | union_id | user_id").WithParam("--user-id-type") } + style := runtime.Str("style") + if style != "simple" && style != "richtext" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--style must be one of: simple | richtext").WithParam("--style") + } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { @@ -55,6 +60,7 @@ var OKRGetProgressRecord = common.Shortcut{ Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { progressID := runtime.Str("progress-id") userIDType := runtime.Str("user-id-type") + style := runtime.Str("style") queryParams := map[string]interface{}{"user_id_type": userIDType} @@ -69,21 +75,45 @@ var OKRGetProgressRecord = common.Shortcut{ return err } - resp := record.ToResp() - result := map[string]interface{}{ - "progress": resp, - } + var result map[string]interface{} + if style == "simple" { + resp := record.ToSimple() + result = map[string]interface{}{ + "progress": resp, + "style": style, + } - runtime.OutFormat(result, nil, func(w io.Writer) { - fmt.Fprintf(w, "Progress [%s]\n", resp.ID) - fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) - if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { - fmt.Fprintf(w, " ProgressRate: %.1f%%\n", *resp.ProgressRate.Percent) + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Progress [%s] (style: %s)\n", resp.ID, style) + fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) + if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { + fmt.Fprintf(w, " ProgressRate: %.1f%%\n", *resp.ProgressRate.Percent) + } + if resp.Content != nil { + fmt.Fprintf(w, " Content: %s\n", resp.Content.Text) + if len(resp.Content.Mention) > 0 { + fmt.Fprintf(w, " Mentions: %v\n", resp.Content.Mention) + } + } + }) + } else { + resp := record.ToResp() + result = map[string]interface{}{ + "progress": resp, + "style": style, } - if resp.Content != nil { - fmt.Fprintf(w, " Content: %s\n", *resp.Content) - } - }) + + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Progress [%s] (style: %s)\n", resp.ID, style) + fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) + if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { + fmt.Fprintf(w, " ProgressRate: %.1f%%\n", *resp.ProgressRate.Percent) + } + if resp.Content != nil { + fmt.Fprintf(w, " Content: %s\n", *resp.Content) + } + }) + } return nil }, } diff --git a/shortcuts/okr/okr_progress_update.go b/shortcuts/okr/okr_progress_update.go index c492ec758..52ae3b86a 100644 --- a/shortcuts/okr/okr_progress_update.go +++ b/shortcuts/okr/okr_progress_update.go @@ -10,6 +10,7 @@ import ( "io" "math" "strconv" + "strings" "github.com/larksuite/cli/errs" "github.com/larksuite/cli/shortcuts/common" @@ -25,12 +26,35 @@ type updateProgressRecordParams struct { // parseUpdateProgressRecordParams parses and validates flags from runtime into request-ready parameters. func parseUpdateProgressRecordParams(runtime *common.RuntimeContext) (*updateProgressRecordParams, error) { + style := runtime.Str("style") content := runtime.Str("content") - var cb ContentBlock - if err := json.Unmarshal([]byte(content), &cb); err != nil { - return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + var contentV1 *ContentBlockV1 + + if style == "simple" { + var sp SemiPlainContent + if err := json.Unmarshal([]byte(content), &sp); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid semi-plain JSON: {\"text\":\"...\",\"mention\":[\"...\"]}: %s", err).WithParam("--content").WithCause(err) + } + if strings.TrimSpace(sp.Text) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content text is required and cannot be empty").WithParam("--content") + } + for i, m := range sp.Mention { + if strings.TrimSpace(m) == "" { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content mention[%d] cannot be empty", i).WithParam("--content") + } + } + if len(sp.Docs) > 0 || len(sp.Images) > 0 { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content docs and images are not supported in simple style input; use richtext style or remove these fields").WithParam("--content") + } + contentV1 = sp.ToContentBlock().ToV1() + } else { + // richtext mode + var cb ContentBlock + if err := json.Unmarshal([]byte(content), &cb); err != nil { + return nil, errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + } + contentV1 = cb.ToV1() } - contentV1 := cb.ToV1() var progressRate *ProgressRateV1 if v := runtime.Str("progress-percent"); v != "" { @@ -67,10 +91,11 @@ var OKRUpdateProgressRecord = common.Shortcut{ HasFormat: true, Flags: []common.Flag{ {Name: "progress-id", Desc: "progress ID (int64)", Required: true}, - {Name: "content", Desc: "progress content in ContentBlock JSON format", Required: true, Input: []string{common.File, common.Stdin}}, + {Name: "content", Desc: "progress content: semi-plain JSON {\"text\":\"...\",\"mention\":[\"...\"]} (simple style) or ContentBlock JSON (richtext style)", Required: true, Input: []string{common.File, common.Stdin}}, {Name: "progress-percent", Desc: "progress percentage"}, {Name: "progress-status", Desc: "progress status: normal | overdue | done", Enum: []string{"normal", "overdue", "done"}}, {Name: "user-id-type", Default: "open_id", Desc: "user ID type: open_id | union_id | user_id"}, + {Name: "style", Default: "simple", Desc: "input style: simple (semi-plain text JSON) | richtext (ContentBlock JSON)", Enum: []string{"simple", "richtext"}}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { progressID := runtime.Str("progress-id") @@ -88,9 +113,35 @@ var OKRUpdateProgressRecord = common.Shortcut{ if err := common.RejectDangerousCharsTyped("--content", content); err != nil { return err } - var cb ContentBlock - if err := json.Unmarshal([]byte(content), &cb); err != nil { - return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + + style := runtime.Str("style") + if style != "simple" && style != "richtext" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--style must be one of: simple | richtext").WithParam("--style") + } + + // Validate content based on style + if style == "simple" { + var sp SemiPlainContent + if err := json.Unmarshal([]byte(content), &sp); err != nil { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid semi-plain JSON: {\"text\":\"...\",\"mention\":[\"...\"]}: %s", err).WithParam("--content").WithCause(err) + } + if strings.TrimSpace(sp.Text) == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content text is required and cannot be empty").WithParam("--content") + } + for i, m := range sp.Mention { + if strings.TrimSpace(m) == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content mention[%d] cannot be empty", i).WithParam("--content") + } + } + if len(sp.Docs) > 0 || len(sp.Images) > 0 { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content docs and images are not supported in simple style input; use richtext style or remove these fields").WithParam("--content") + } + } else { + // richtext mode + var cb ContentBlock + if err := json.Unmarshal([]byte(content), &cb); err != nil { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--content must be valid ContentBlock JSON: %s", err).WithParam("--content").WithCause(err) + } } if v := runtime.Str("progress-percent"); v != "" { @@ -158,21 +209,43 @@ var OKRUpdateProgressRecord = common.Shortcut{ return err } - resp := record.ToResp() - result := map[string]interface{}{ - "progress": resp, - } + style := runtime.Str("style") + var result map[string]interface{} + if style == "simple" { + resp := record.ToSimple() + result = map[string]interface{}{ + "progress": resp, + "style": style, + } - runtime.OutFormat(result, nil, func(w io.Writer) { - fmt.Fprintf(w, "Updated Progress [%s]\n", resp.ID) - fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) - if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { - fmt.Fprintf(w, " Progress: %.1f%%\n", *resp.ProgressRate.Percent) + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Updated Progress [%s] (style: %s)\n", resp.ID, style) + fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) + if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { + fmt.Fprintf(w, " Progress: %.1f%%\n", *resp.ProgressRate.Percent) + } + if resp.Content != nil { + fmt.Fprintf(w, " Content: %s\n", resp.Content.Text) + } + }) + } else { + resp := record.ToResp() + result = map[string]interface{}{ + "progress": resp, + "style": style, } - if resp.Content != nil { - fmt.Fprintf(w, " Content: %s\n", *resp.Content) - } - }) + + runtime.OutFormat(result, nil, func(w io.Writer) { + fmt.Fprintf(w, "Updated Progress [%s] (style: %s)\n", resp.ID, style) + fmt.Fprintf(w, " ModifyTime: %s\n", resp.ModifyTime) + if resp.ProgressRate != nil && resp.ProgressRate.Percent != nil { + fmt.Fprintf(w, " Progress: %.1f%%\n", *resp.ProgressRate.Percent) + } + if resp.Content != nil { + fmt.Fprintf(w, " Content: %s\n", *resp.Content) + } + }) + } return nil }, } diff --git a/shortcuts/okr/okr_progress_update_test.go b/shortcuts/okr/okr_progress_update_test.go index 6d56d4dd3..b3f2cc464 100644 --- a/shortcuts/okr/okr_progress_update_test.go +++ b/shortcuts/okr/okr_progress_update_test.go @@ -5,11 +5,13 @@ package okr import ( "bytes" + "errors" "strings" "testing" "github.com/spf13/cobra" + "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/cmdutil" "github.com/larksuite/cli/internal/core" "github.com/larksuite/cli/internal/httpmock" @@ -45,6 +47,7 @@ func TestProgressUpdateValidate_MissingProgressID(t *testing.T) { err := runProgressUpdateShortcut(t, f, stdout, []string{ "+progress-update", "--content", validContentBlockJSON, + "--style", "richtext", }) if err == nil { t.Fatal("expected error for missing --progress-id") @@ -58,6 +61,7 @@ func TestProgressUpdateValidate_InvalidProgressID(t *testing.T) { "+progress-update", "--progress-id", "abc", "--content", validContentBlockJSON, + "--style", "richtext", }) if err == nil { t.Fatal("expected error for invalid --progress-id") @@ -86,6 +90,7 @@ func TestProgressUpdateValidate_InvalidContentJSON(t *testing.T) { "+progress-update", "--progress-id", "123", "--content", "not-json", + "--style", "richtext", }) if err == nil { t.Fatal("expected error for invalid --content JSON") @@ -102,6 +107,7 @@ func TestProgressUpdateValidate_InvalidUserIDType(t *testing.T) { "+progress-update", "--progress-id", "123", "--content", validContentBlockJSON, + "--style", "richtext", "--user-id-type", "invalid", }) if err == nil { @@ -116,6 +122,7 @@ func TestProgressUpdateValidate_InvalidProgressPercent_OutOfRange(t *testing.T) "+progress-update", "--progress-id", "123", "--content", validContentBlockJSON, + "--style", "richtext", "--progress-percent", "-999999999999", }) if err == nil { @@ -133,6 +140,7 @@ func TestProgressUpdateValidate_InvalidProgressStatus(t *testing.T) { "+progress-update", "--progress-id", "123", "--content", validContentBlockJSON, + "--style", "richtext", "--progress-status", "invalid_status", }) if err == nil { @@ -162,6 +170,7 @@ func TestProgressUpdateValidate_Valid(t *testing.T) { "+progress-update", "--progress-id", "123", "--content", validContentBlockJSON, + "--style", "richtext", }) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -177,6 +186,7 @@ func TestProgressUpdateDryRun(t *testing.T) { "+progress-update", "--progress-id", "456", "--content", validContentBlockJSON, + "--style", "richtext", "--dry-run", }) if err != nil { @@ -201,6 +211,7 @@ func TestProgressUpdateDryRun_WithProgressRate(t *testing.T) { "+progress-update", "--progress-id", "456", "--content", validContentBlockJSON, + "--style", "richtext", "--progress-percent", "50", "--progress-status", "overdue", "--dry-run", @@ -235,6 +246,7 @@ func TestProgressUpdateExecute_Success(t *testing.T) { "+progress-update", "--progress-id", "789", "--content", validContentBlockJSON, + "--style", "richtext", }) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -265,8 +277,202 @@ func TestProgressUpdateExecute_APIError(t *testing.T) { "+progress-update", "--progress-id", "999", "--content", validContentBlockJSON, + "--style", "richtext", }) if err == nil { t.Fatal("expected error for API failure") } } + +// --- Simple mode tests --- + +func TestProgressUpdateExecute_SimpleMode_DefaultStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, progressUpdateTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PUT", + URL: "/open-apis/okr/v1/progress_records/500", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "progress_id": "500", + "modify_time": "1735776000000", + }, + }, + }) + // Use default style (simple) without specifying --style + err := runProgressUpdateShortcut(t, f, stdout, []string{ + "+progress-update", + "--progress-id", "500", + "--content", validSemiPlainJSON, + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + data := decodeEnvelope(t, stdout) + pr, _ := data["progress"].(map[string]interface{}) + if pr == nil { + t.Fatal("expected progress in output") + } + if pr["progress_id"] != "500" { + t.Fatalf("progress_id = %v, want 500", pr["progress_id"]) + } +} + +func TestProgressUpdateExecute_SimpleMode_ExplicitStyle(t *testing.T) { + t.Parallel() + f, stdout, _, reg := cmdutil.TestFactory(t, progressUpdateTestConfig(t)) + reg.Register(&httpmock.Stub{ + Method: "PUT", + URL: "/open-apis/okr/v1/progress_records/600", + Body: map[string]interface{}{ + "code": 0, + "msg": "ok", + "data": map[string]interface{}{ + "progress_id": "600", + "modify_time": "1735776000000", + }, + }, + }) + // Explicitly specify --style simple with mentions and progress rate + err := runProgressUpdateShortcut(t, f, stdout, []string{ + "+progress-update", + "--progress-id", "600", + "--content", `{"text":"updated progress","mention":["ou_abc"]}`, + "--style", "simple", + "--progress-percent", "80", + "--progress-status", "normal", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + data := decodeEnvelope(t, stdout) + pr, _ := data["progress"].(map[string]interface{}) + if pr == nil { + t.Fatal("expected progress in output") + } + if pr["progress_id"] != "600" { + t.Fatalf("progress_id = %v, want 600", pr["progress_id"]) + } +} + +func TestProgressUpdateValidate_SimpleMode_InvalidSemiPlainJSON(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressUpdateTestConfig(t)) + err := runProgressUpdateShortcut(t, f, stdout, []string{ + "+progress-update", + "--progress-id", "123", + "--content", `{"text":"invalid json`, + }) + if err == nil { + t.Fatal("expected error for invalid semi-plain JSON") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param %q, got %q", "--content", validationErr.Param) + } + if !strings.Contains(err.Error(), "--content must be valid semi-plain JSON") { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestProgressUpdateValidate_SimpleMode_EmptyMention(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressUpdateTestConfig(t)) + err := runProgressUpdateShortcut(t, f, stdout, []string{ + "+progress-update", + "--progress-id", "123", + "--content", `{"text":"has empty mention","mention":["ou_abc",""]}`, + }) + if err == nil { + t.Fatal("expected error for empty mention in simple mode") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param %q, got %q", "--content", validationErr.Param) + } + if !strings.Contains(err.Error(), "--content mention[1] cannot be empty") { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestProgressUpdateValidate_SimpleMode_ImagesNotSupported(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressUpdateTestConfig(t)) + err := runProgressUpdateShortcut(t, f, stdout, []string{ + "+progress-update", + "--progress-id", "123", + "--content", `{"text":"has images","mention":[],"images":["img_token"]}`, + }) + if err == nil { + t.Fatal("expected error for images in simple mode") + } + problem, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("expected typed error, got: %v", err) + } + if problem.Category != errs.CategoryValidation { + t.Fatalf("expected category %q, got %q", errs.CategoryValidation, problem.Category) + } + if problem.Subtype != errs.SubtypeInvalidArgument { + t.Fatalf("expected subtype %q, got %q", errs.SubtypeInvalidArgument, problem.Subtype) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected *errs.ValidationError, got: %T", err) + } + if validationErr.Param != "--content" { + t.Fatalf("expected param %q, got %q", "--content", validationErr.Param) + } + if !strings.Contains(err.Error(), "docs and images are not supported in simple style input") { + t.Fatalf("unexpected error: %v", err) + } +} + +func TestProgressUpdateDryRun_SimpleMode(t *testing.T) { + t.Parallel() + f, stdout, _, _ := cmdutil.TestFactory(t, progressUpdateTestConfig(t)) + err := runProgressUpdateShortcut(t, f, stdout, []string{ + "+progress-update", + "--progress-id", "700", + "--content", validSemiPlainJSON, + "--dry-run", + }) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + output := stdout.String() + if !strings.Contains(output, "/open-apis/okr/v1/progress_records/700") { + t.Fatalf("dry-run output should contain API path, got: %s", output) + } + if !strings.Contains(output, "PUT") { + t.Fatalf("dry-run output should contain PUT method, got: %s", output) + } +} diff --git a/shortcuts/okr/shortcuts.go b/shortcuts/okr/shortcuts.go index eb476c56e..5b371e690 100644 --- a/shortcuts/okr/shortcuts.go +++ b/shortcuts/okr/shortcuts.go @@ -22,5 +22,6 @@ func Shortcuts() []common.Shortcut { OKRReorder, OKRWeight, OKRIndicatorUpdate, + OKRPatch, } } diff --git a/shortcuts/register_test.go b/shortcuts/register_test.go index 5137584b9..c9514b0cb 100644 --- a/shortcuts/register_test.go +++ b/shortcuts/register_test.go @@ -170,6 +170,27 @@ func TestRegisterShortcutsMountsDocsMediaPreview(t *testing.T) { } } +func TestRegisterShortcutsMountsDocsHistoryCommands(t *testing.T) { + program := &cobra.Command{Use: "root"} + RegisterShortcuts(program, newRegisterTestFactory(t)) + + for _, name := range []string{"+history-list", "+history-revert", "+history-revert-status"} { + cmd, _, err := program.Find([]string{"docs", name}) + if err != nil { + t.Fatalf("find docs %s shortcut: %v", name, err) + } + if cmd == nil || cmd.Name() != name { + t.Fatalf("docs %s shortcut not mounted: %#v", name, cmd) + } + if cmd.Flags().Lookup("api-version") != nil { + t.Fatalf("docs %s should not expose --api-version", name) + } + if !strings.Contains(cmd.Long, "lark-cli skills read lark-doc references/lark-doc-history.md") { + t.Fatalf("docs %s help missing history skill guidance:\n%s", name, cmd.Long) + } + } +} + func TestRegisterShortcutsDocsHelpAddsSkillReadGuidance(t *testing.T) { program := &cobra.Command{Use: "root"} RegisterShortcuts(program, newRegisterTestFactory(t)) diff --git a/shortcuts/task/task_util_test.go b/shortcuts/task/task_util_test.go index a1ee9aaf2..3db84d12a 100644 --- a/shortcuts/task/task_util_test.go +++ b/shortcuts/task/task_util_test.go @@ -159,7 +159,7 @@ func TestHandleTaskApiResultWithContext_PermissionConsoleURL(t *testing.T) { if pe.Subtype != errs.SubtypeAppScopeNotApplied { t.Errorf("subtype = %q, want %q", pe.Subtype, errs.SubtypeAppScopeNotApplied) } - if pe.ConsoleURL == "" || !strings.Contains(pe.ConsoleURL, "open.larksuite.com/app/cli_a123/auth") { + if pe.ConsoleURL == "" || !strings.Contains(pe.ConsoleURL, "open.larksuite.com/page/scope-apply?clientID=cli_a123") { t.Errorf("ConsoleURL = %q, want Lark developer console URL", pe.ConsoleURL) } if len(pe.MissingScopes) != 1 || pe.MissingScopes[0] != "task:attachment:write" { diff --git a/shortcuts/wiki/wiki_helpers.go b/shortcuts/wiki/wiki_helpers.go index e69184803..dc7071569 100644 --- a/shortcuts/wiki/wiki_helpers.go +++ b/shortcuts/wiki/wiki_helpers.go @@ -6,6 +6,7 @@ package wiki import ( "strings" + "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/core" "github.com/larksuite/cli/shortcuts/common" ) @@ -26,3 +27,17 @@ func wikiNodeURL(brand core.LarkBrand, node *wikiNodeRecord) string { } return common.BuildResourceURL(brand, "wiki", node.NodeToken) } + +func appendWikiProblemHint(err error, hint string) error { + if strings.TrimSpace(hint) == "" { + return err + } + if p, ok := errs.ProblemOf(err); ok { + if strings.TrimSpace(p.Hint) != "" { + p.Hint = p.Hint + "\n" + hint + } else { + p.Hint = hint + } + } + return err +} diff --git a/shortcuts/wiki/wiki_list_copy_test.go b/shortcuts/wiki/wiki_list_copy_test.go index 924a9129d..3d0cf983f 100644 --- a/shortcuts/wiki/wiki_list_copy_test.go +++ b/shortcuts/wiki/wiki_list_copy_test.go @@ -5,12 +5,14 @@ package wiki import ( "encoding/json" + "errors" "net/http" "net/url" "reflect" "strings" "testing" + "github.com/larksuite/cli/errs" "github.com/larksuite/cli/internal/cmdutil" "github.com/larksuite/cli/internal/httpmock" "github.com/larksuite/cli/shortcuts/common" @@ -130,6 +132,155 @@ func TestWikiNodeListRequiresSpaceID(t *testing.T) { } } +func TestWikiNodeListRejectsNonNumericSpaceID(t *testing.T) { + t.Parallel() + + factory, _, _, _ := cmdutil.TestFactory(t, wikiTestConfig()) + err := mountAndRunWiki(t, WikiNodeList, []string{ + "+node-list", "--space-id", "wikcnABC", "--as", "user", + }, factory, nil) + if err == nil { + t.Fatalf("expected numeric space_id validation error, got nil") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected ValidationError, got %T: %v", err, err) + } + if p.Category != errs.CategoryValidation || p.Subtype != errs.SubtypeInvalidArgument || validationErr.Param != "--space-id" { + t.Fatalf("problem = %#v param=%q, want validation/invalid_argument/--space-id", p, validationErr.Param) + } + if !strings.Contains(p.Message, "--space-id must be a numeric wiki space_id") || !strings.Contains(p.Hint, "+space-list") { + t.Fatalf("expected numeric space_id validation error, got %v", err) + } +} + +func TestWikiNodeListRejectsDocumentURLAsParentNodeToken(t *testing.T) { + t.Parallel() + + factory, _, _, _ := cmdutil.TestFactory(t, wikiTestConfig()) + err := mountAndRunWiki(t, WikiNodeList, []string{ + "+node-list", + "--space-id", "7211568716812369922", + "--parent-node-token", "https://feishu.cn/docx/docxABC", + "--as", "user", + }, factory, nil) + if err == nil { + t.Fatalf("expected parent-node-token URL type validation error, got nil") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + var validationErr *errs.ValidationError + if !errors.As(err, &validationErr) { + t.Fatalf("expected ValidationError, got %T: %v", err, err) + } + if p.Category != errs.CategoryValidation || p.Subtype != errs.SubtypeInvalidArgument || validationErr.Param != "--parent-node-token" { + t.Fatalf("problem = %#v param=%q, want validation/invalid_argument/--parent-node-token", p, validationErr.Param) + } + if !strings.Contains(p.Message, "must identify a wiki node") || !strings.Contains(p.Hint, "+node-get") { + t.Fatalf("expected parent-node-token URL type validation error, got %v", err) + } +} + +func TestWikiNodeListNormalizesWikiURLParentNodeToken(t *testing.T) { + t.Parallel() + + token, err := normalizeWikiNodeListParentToken("https://feishu.cn/wiki/wikcnPARENT?from=copy") + if err != nil { + t.Fatalf("normalizeWikiNodeListParentToken() error = %v", err) + } + if token != "wikcnPARENT" { + t.Fatalf("token = %q, want wikcnPARENT", token) + } +} + +func TestWikiNodeListAcceptsOpaqueParentNodeToken(t *testing.T) { + t.Parallel() + + const opaqueNodeToken = "Q6ZM_EXAMPLE_TOKEN" + token, err := normalizeWikiNodeListParentToken(opaqueNodeToken) + if err != nil { + t.Fatalf("normalizeWikiNodeListParentToken() error = %v", err) + } + if token != opaqueNodeToken { + t.Fatalf("token = %q, want %q", token, opaqueNodeToken) + } +} + +func TestWikiNodeListRejectsAmbiguousSpaceAndParentTokens(t *testing.T) { + t.Parallel() + + if err := validateWikiNodeListSpaceID("https://example.invalid/wiki/space"); err == nil { + t.Fatalf("expected URL space-id validation error") + } else { + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + if !strings.Contains(p.Message, "not a URL or path") || !strings.Contains(p.Hint, "+space-list") { + t.Fatalf("problem = %#v, want URL/path message and +space-list hint", p) + } + } + + tests := []struct { + name string + input string + wantMsg string + }{ + { + name: "partial wiki path", + input: "wik_placeholder/child", + wantMsg: "raw wiki node token", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := normalizeWikiNodeListParentToken(tt.input) + if err == nil { + t.Fatalf("expected parent token validation error") + } + p, ok := errs.ProblemOf(err) + if !ok { + t.Fatalf("ProblemOf() ok=false for %T: %v", err, err) + } + if !strings.Contains(p.Message, tt.wantMsg) { + t.Fatalf("message = %q, want substring %q", p.Message, tt.wantMsg) + } + }) + } +} + +func TestWikiNodeListAcceptsEmptyParentToken(t *testing.T) { + t.Parallel() + + token, err := normalizeWikiNodeListParentToken("") + if err != nil { + t.Fatalf("normalizeWikiNodeListParentToken(empty) error = %v", err) + } + if token != "" { + t.Fatalf("token = %q, want empty", token) + } +} + +func TestWikiNodeListProblemAddsActionableHint(t *testing.T) { + t.Parallel() + + err := errs.NewAPIError(errs.SubtypeInvalidParameters, "param err: invalid page_token").WithCode(131002) + got := wikiNodeListProblem(err, nil) + p, ok := errs.ProblemOf(got) + if !ok { + t.Fatalf("ProblemOf() ok=false") + } + if !strings.Contains(p.Hint, "page token is invalid or stale") { + t.Fatalf("hint = %q, want invalid page token guidance", p.Hint) + } +} + func TestWikiNodeListReturnsNodesForSpace(t *testing.T) { t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) @@ -137,14 +288,14 @@ func TestWikiNodeListReturnsNodesForSpace(t *testing.T) { reg.Register(&httpmock.Stub{ Method: "GET", - URL: "/open-apis/wiki/v2/spaces/space_123/nodes", + URL: "/open-apis/wiki/v2/spaces/7211568716812369922/nodes", Body: map[string]interface{}{ "code": 0, "data": map[string]interface{}{ "has_more": false, "items": []interface{}{ map[string]interface{}{ - "space_id": "space_123", + "space_id": "7211568716812369922", "node_token": "wik_node_1", "obj_token": "docx_1", "obj_type": "docx", @@ -154,7 +305,7 @@ func TestWikiNodeListReturnsNodesForSpace(t *testing.T) { "has_child": true, }, map[string]interface{}{ - "space_id": "space_123", + "space_id": "7211568716812369922", "node_token": "wik_node_2", "obj_token": "docx_2", "obj_type": "docx", @@ -170,7 +321,7 @@ func TestWikiNodeListReturnsNodesForSpace(t *testing.T) { }) err := mountAndRunWiki(t, WikiNodeList, []string{ - "+node-list", "--space-id", "space_123", "--as", "bot", + "+node-list", "--space-id", "7211568716812369922", "--as", "bot", }, factory, stdout) if err != nil { t.Fatalf("mountAndRunWiki() error = %v", err) @@ -208,21 +359,22 @@ func TestWikiNodeListPassesParentNodeToken(t *testing.T) { t.Setenv("LARKSUITE_CLI_CONFIG_DIR", t.TempDir()) factory, stdout, _, reg := cmdutil.TestFactory(t, wikiTestConfig()) + const parentNodeToken = "Q6ZM_EXAMPLE_TOKEN" stub := &httpmock.Stub{ Method: "GET", - URL: "/open-apis/wiki/v2/spaces/space_123/nodes?page_size=50&parent_node_token=wik_parent", + URL: "/open-apis/wiki/v2/spaces/7211568716812369922/nodes?page_size=50&parent_node_token=" + parentNodeToken, Body: map[string]interface{}{ "code": 0, "data": map[string]interface{}{ "has_more": false, "items": []interface{}{ map[string]interface{}{ - "space_id": "space_123", + "space_id": "7211568716812369922", "node_token": "wik_child", "obj_token": "docx_child", "obj_type": "docx", - "parent_node_token": "wik_parent", + "parent_node_token": parentNodeToken, "node_type": "origin", "title": "Child Doc", "has_child": false, @@ -235,7 +387,7 @@ func TestWikiNodeListPassesParentNodeToken(t *testing.T) { reg.Register(stub) err := mountAndRunWiki(t, WikiNodeList, []string{ - "+node-list", "--space-id", "space_123", "--parent-node-token", "wik_parent", "--as", "bot", + "+node-list", "--space-id", "7211568716812369922", "--parent-node-token", parentNodeToken, "--as", "bot", }, factory, stdout) if err != nil { t.Fatalf("mountAndRunWiki() error = %v", err) @@ -257,8 +409,8 @@ func TestWikiNodeListPassesParentNodeToken(t *testing.T) { if len(envelope.Data.Nodes) != 1 { t.Fatalf("len(nodes) = %d, want 1", len(envelope.Data.Nodes)) } - if envelope.Data.Nodes[0]["parent_node_token"] != "wik_parent" { - t.Fatalf("nodes[0].parent_node_token = %v, want %q", envelope.Data.Nodes[0]["parent_node_token"], "wik_parent") + if envelope.Data.Nodes[0]["parent_node_token"] != parentNodeToken { + t.Fatalf("nodes[0].parent_node_token = %v, want %q", envelope.Data.Nodes[0]["parent_node_token"], parentNodeToken) } } @@ -286,7 +438,7 @@ func TestWikiNodeListResolvesMyLibraryForUser(t *testing.T) { "code": 0, "msg": "success", "data": map[string]interface{}{ "space": map[string]interface{}{ - "space_id": "space_personal_42", + "space_id": "7211568716812369923", "name": "My Library", "space_type": "my_library", }, @@ -296,14 +448,14 @@ func TestWikiNodeListResolvesMyLibraryForUser(t *testing.T) { // Step 2: list nodes in the resolved space. reg.Register(&httpmock.Stub{ Method: "GET", - URL: "/open-apis/wiki/v2/spaces/space_personal_42/nodes", + URL: "/open-apis/wiki/v2/spaces/7211568716812369923/nodes", Body: map[string]interface{}{ "code": 0, "msg": "success", "data": map[string]interface{}{ "has_more": false, "items": []interface{}{ map[string]interface{}{ - "space_id": "space_personal_42", + "space_id": "7211568716812369923", "node_token": "wik_personal_1", "title": "Personal Note", }, @@ -334,8 +486,8 @@ func TestWikiNodeListResolvesMyLibraryForUser(t *testing.T) { if envelope.Meta.Count != 1 { t.Fatalf("meta.count = %v, want 1", envelope.Meta.Count) } - if envelope.Data.Nodes[0]["space_id"] != "space_personal_42" { - t.Fatalf("nodes[0].space_id = %v, want space_personal_42", envelope.Data.Nodes[0]["space_id"]) + if envelope.Data.Nodes[0]["space_id"] != "7211568716812369923" { + t.Fatalf("nodes[0].space_id = %v, want 7211568716812369923", envelope.Data.Nodes[0]["space_id"]) } } @@ -758,21 +910,21 @@ func TestWikiNodeListDefaultIsSinglePage(t *testing.T) { // test pins down the "default = single page" contract. reg.Register(&httpmock.Stub{ Method: "GET", - URL: "/open-apis/wiki/v2/spaces/space_123/nodes", + URL: "/open-apis/wiki/v2/spaces/7211568716812369922/nodes", Body: map[string]interface{}{ "code": 0, "msg": "success", "data": map[string]interface{}{ "has_more": true, "page_token": "tok_next", "items": []interface{}{ - map[string]interface{}{"space_id": "space_123", "node_token": "wik_1", "title": "First"}, + map[string]interface{}{"space_id": "7211568716812369922", "node_token": "wik_1", "title": "First"}, }, }, }, }) err := mountAndRunWiki(t, WikiNodeList, []string{ - "+node-list", "--space-id", "space_123", "--as", "bot", + "+node-list", "--space-id", "7211568716812369922", "--as", "bot", }, factory, stdout) if err != nil { t.Fatalf("mountAndRunWiki() error = %v", err) @@ -802,14 +954,14 @@ func TestWikiNodeListPrettyFormatRendersFields(t *testing.T) { factory, stdout, _, reg := cmdutil.TestFactory(t, wikiTestConfig()) reg.Register(&httpmock.Stub{ Method: "GET", - URL: "/open-apis/wiki/v2/spaces/space_123/nodes", + URL: "/open-apis/wiki/v2/spaces/7211568716812369922/nodes", Body: map[string]interface{}{ "code": 0, "msg": "success", "data": map[string]interface{}{ "has_more": false, "items": []interface{}{ map[string]interface{}{ - "space_id": "space_123", + "space_id": "7211568716812369922", "node_token": "wik_1", "obj_type": "docx", "obj_token": "docx_1", @@ -822,7 +974,7 @@ func TestWikiNodeListPrettyFormatRendersFields(t *testing.T) { }) err := mountAndRunWiki(t, WikiNodeList, []string{ - "+node-list", "--space-id", "space_123", "--format", "pretty", "--as", "bot", + "+node-list", "--space-id", "7211568716812369922", "--format", "pretty", "--as", "bot", }, factory, stdout) if err != nil { t.Fatalf("mountAndRunWiki() error = %v", err) diff --git a/shortcuts/wiki/wiki_node_get.go b/shortcuts/wiki/wiki_node_get.go index 8597fb3f5..62ccdd54d 100644 --- a/shortcuts/wiki/wiki_node_get.go +++ b/shortcuts/wiki/wiki_node_get.go @@ -69,8 +69,8 @@ var WikiNodeGet = common.Shortcut{ {Name: "space-id", Desc: "optional: assert the resolved node lives in this space"}, }, Tips: []string{ - "--node-token accepts a raw token (wikcnXXX, docxXXX, ...) or a Lark URL like https://feishu.cn/wiki/<token> or https://feishu.cn/docx/<token>.", - "For raw obj_tokens (not starting with wik), pass --obj-type so the API knows how to resolve them; URL inputs infer it from the path.", + "--node-token accepts a raw wiki node_token, obj_token, or a Lark URL like https://feishu.cn/wiki/<token> or https://feishu.cn/docx/<token>.", + "For raw obj_tokens, pass --obj-type so the API knows how to resolve them; URL inputs infer it from the path.", "Pair with +move / +node-copy / +delete-space to confirm space_id, obj_type, and parent before mutating.", "--token is the deprecated original name and still works for backward compatibility; new scripts should use --node-token.", }, @@ -235,29 +235,10 @@ func parseWikiNodeGetSpec(rawToken, rawObjType, rawSpaceID string) (wikiNodeGetS ).WithParam("--node-token") } else { spec.Token = tokenInput - if looksLikeWikiNodeToken(spec.Token) { + if spec.ObjType == "" { spec.SourceKind = "raw-node" - // node_tokens take no obj_type; reject a conflicting flag rather - // than silently passing it (the API would just ignore it, but the - // mismatch signals caller confusion). - if spec.ObjType != "" { - return wikiNodeGetSpec{}, errs.NewValidationError(errs.SubtypeInvalidArgument, - "--obj-type is only valid for obj_tokens; %q looks like a node_token", - spec.Token, - ).WithParam("--obj-type") - } } else { spec.SourceKind = "raw-obj" - // A raw obj_token needs an explicit obj_type: get_node would - // otherwise default to "doc" and fail confusingly for docx / - // sheet / bitable / ... Fail fast with the same upfront contract - // as +node-delete instead of deferring to an opaque API error. - if spec.ObjType == "" { - return wikiNodeGetSpec{}, errs.NewValidationError(errs.SubtypeInvalidArgument, - "--obj-type is required for a raw obj_token %q (one of: %s); or pass a typed Lark URL (e.g. /docx/<token>) so it can be inferred", - spec.Token, strings.Join(wikiNodeGetObjTypeEnum, ", "), - ).WithParam("--obj-type") - } } } @@ -270,18 +251,6 @@ func parseWikiNodeGetSpec(rawToken, rawObjType, rawSpaceID string) (wikiNodeGetS return spec, nil } -// looksLikeWikiNodeToken returns true when the token has the `wik` prefix used -// for node_tokens. Lark wiki tokens are case-insensitive in practice; callers -// pass `wikcn`/`wikus`/`Wik...` interchangeably, so normalize for the check. -// -// This is a heuristic based on the current Lark token-naming convention, not a -// guaranteed invariant: if Lark ever introduces a non-node token type that -// also starts with `wik`, it would be misclassified. Worst case is a -// confusing API error (no data risk); revisit if the token scheme changes. -func looksLikeWikiNodeToken(token string) bool { - return strings.HasPrefix(strings.ToLower(token), "wik") -} - // tokenAndObjTypeFromWikiURL extracts the token and inferred obj_type from a // Lark URL path. The wiki path returns an empty obj_type because node_tokens // don't need one. diff --git a/shortcuts/wiki/wiki_node_get_test.go b/shortcuts/wiki/wiki_node_get_test.go index a07ea26e0..7df66db08 100644 --- a/shortcuts/wiki/wiki_node_get_test.go +++ b/shortcuts/wiki/wiki_node_get_test.go @@ -31,6 +31,22 @@ func TestParseWikiNodeGetSpecRawNodeToken(t *testing.T) { } } +func TestParseWikiNodeGetSpecOpaqueRawNodeToken(t *testing.T) { + t.Parallel() + + const opaqueNodeToken = "Sm78_EXAMPLE_TOKEN" + spec, err := parseWikiNodeGetSpec(opaqueNodeToken, "", "") + if err != nil { + t.Fatalf("parseWikiNodeGetSpec() error = %v", err) + } + if spec.Token != opaqueNodeToken || spec.ObjType != "" || spec.SourceKind != "raw-node" { + t.Fatalf("spec = %+v, want raw-node %s with no obj_type", spec, opaqueNodeToken) + } + if got := spec.RequestParams(); !reflect.DeepEqual(got, map[string]interface{}{"token": opaqueNodeToken}) { + t.Fatalf("RequestParams() = %v, want {token: %s}", got, opaqueNodeToken) + } +} + func TestParseWikiNodeGetSpecRawObjTokenWithExplicitObjType(t *testing.T) { t.Parallel() @@ -43,23 +59,30 @@ func TestParseWikiNodeGetSpecRawObjTokenWithExplicitObjType(t *testing.T) { } } -func TestParseWikiNodeGetSpecRejectsRawObjTokenWithoutObjType(t *testing.T) { +func TestParseWikiNodeGetSpecRawTokenWithoutObjTypeDefaultsToNodeToken(t *testing.T) { t.Parallel() - // Mirrors +node-delete: a raw obj_token with no --obj-type must fail - // upfront instead of defaulting to "doc" and hitting an opaque API error. - _, err := parseWikiNodeGetSpec("bascnXYZ", "", "") - if err == nil || !strings.Contains(err.Error(), "--obj-type is required for a raw obj_token") { - t.Fatalf("expected raw obj_token obj-type-required error, got %v", err) + spec, err := parseWikiNodeGetSpec("bascnXYZ", "", "") + if err != nil { + t.Fatalf("parseWikiNodeGetSpec() error = %v", err) + } + if spec.Token != "bascnXYZ" || spec.ObjType != "" || spec.SourceKind != "raw-node" { + t.Fatalf("spec = %+v, want raw-node bascnXYZ with no obj_type", spec) } } -func TestParseWikiNodeGetSpecRejectsObjTypeOnNodeToken(t *testing.T) { +func TestParseWikiNodeGetSpecRawTokenWithObjTypeUsesObjTokenLookup(t *testing.T) { t.Parallel() - _, err := parseWikiNodeGetSpec("wikcnABC", "docx", "") - if err == nil || !strings.Contains(err.Error(), "only valid for obj_tokens") { - t.Fatalf("expected node_token + obj_type rejection, got %v", err) + spec, err := parseWikiNodeGetSpec("wikcnABC", "docx", "") + if err != nil { + t.Fatalf("parseWikiNodeGetSpec() error = %v", err) + } + if spec.Token != "wikcnABC" || spec.ObjType != "docx" || spec.SourceKind != "raw-obj" { + t.Fatalf("spec = %+v, want raw-obj wikcnABC with obj_type docx", spec) + } + if got := spec.RequestParams(); !reflect.DeepEqual(got, map[string]interface{}{"token": "wikcnABC", "obj_type": "docx"}) { + t.Fatalf("RequestParams() = %v, want {token: wikcnABC, obj_type: docx}", got) } } diff --git a/shortcuts/wiki/wiki_node_list.go b/shortcuts/wiki/wiki_node_list.go index 35032df5c..494ca0fc3 100644 --- a/shortcuts/wiki/wiki_node_list.go +++ b/shortcuts/wiki/wiki_node_list.go @@ -48,27 +48,19 @@ var WikiNodeList = common.Shortcut{ "--space-id my_library is a per-user alias and is only valid with --as user.", }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { - spaceID := strings.TrimSpace(runtime.Str("space-id")) - // my_library is a per-user personal-library alias; it has no meaning - // for a tenant_access_token (--as bot), so reject early with a clear - // hint instead of deferring to API-time errors. Matches the contract - // used by +node-create and +move. - if runtime.As().IsBot() && spaceID == wikiMyLibrarySpaceID { - return errs.NewValidationError(errs.SubtypeInvalidArgument, "bot identity does not support --space-id my_library; use an explicit --space-id").WithParam("--space-id") - } - if err := validateOptionalResourceName(spaceID, "--space-id"); err != nil { - return err - } - if err := validateOptionalResourceName(strings.TrimSpace(runtime.Str("parent-node-token")), "--parent-node-token"); err != nil { + if _, err := readWikiNodeListSpec(runtime); err != nil { return err } return validateWikiListPagination(runtime, wikiNodeListMaxPageSize) }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { - spaceID := strings.TrimSpace(runtime.Str("space-id")) + spec, err := readWikiNodeListSpec(runtime) + if err != nil { + return common.NewDryRunAPI().Set("error", err.Error()) + } params := map[string]interface{}{"page_size": runtime.Int("page-size")} - if pt := strings.TrimSpace(runtime.Str("parent-node-token")); pt != "" { - params["parent_node_token"] = pt + if spec.ParentNodeToken != "" { + params["parent_node_token"] = spec.ParentNodeToken } if pt := strings.TrimSpace(runtime.Str("page-token")); pt != "" { params["page_token"] = pt @@ -80,7 +72,7 @@ var WikiNodeList = common.Shortcut{ // When the caller passes my_library, +node-list must first resolve it // to the real per-user space_id before listing nodes, mirroring the // two-step orchestration used by +node-create. - if spaceID == wikiMyLibrarySpaceID { + if spec.SpaceID == wikiMyLibrarySpaceID { return d. Desc("2-step orchestration: resolve my_library -> list nodes"). GET("/open-apis/wiki/v2/spaces/my_library"). @@ -91,13 +83,17 @@ var WikiNodeList = common.Shortcut{ Set("space_id", "<resolved_space_id>") } return d. - GET(fmt.Sprintf("/open-apis/wiki/v2/spaces/%s/nodes", validate.EncodePathSegment(spaceID))). + GET(fmt.Sprintf("/open-apis/wiki/v2/spaces/%s/nodes", validate.EncodePathSegment(spec.SpaceID))). Params(params). - Set("space_id", spaceID) + Set("space_id", spec.SpaceID) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { warnIfConflictingPagingFlags(runtime) - spaceID := strings.TrimSpace(runtime.Str("space-id")) + spec, err := readWikiNodeListSpec(runtime) + if err != nil { + return err + } + spaceID := spec.SpaceID // Resolve the my_library alias to the per-user real space_id before // listing, so the subsequent request hits a concrete space endpoint. @@ -110,7 +106,7 @@ var WikiNodeList = common.Shortcut{ spaceID = resolved } - nodes, hasMore, nextToken, err := fetchWikiNodes(runtime, spaceID) + nodes, hasMore, nextToken, err := fetchWikiNodes(runtime, spaceID, spec.ParentNodeToken) if err != nil { return err } @@ -127,10 +123,99 @@ var WikiNodeList = common.Shortcut{ }, } -func fetchWikiNodes(runtime *common.RuntimeContext, spaceID string) ([]map[string]interface{}, bool, string, error) { +type wikiNodeListSpec struct { + SpaceID string + ParentNodeToken string +} + +func readWikiNodeListSpec(runtime *common.RuntimeContext) (wikiNodeListSpec, error) { + spaceID := strings.TrimSpace(runtime.Str("space-id")) + // my_library is a per-user personal-library alias; it has no meaning + // for a tenant_access_token (--as bot), so reject early with a clear + // hint instead of deferring to API-time errors. Matches the contract + // used by +node-create and +move. + if runtime.As().IsBot() && spaceID == wikiMyLibrarySpaceID { + return wikiNodeListSpec{}, errs.NewValidationError(errs.SubtypeInvalidArgument, "bot identity does not support --space-id my_library; use an explicit numeric --space-id").WithParam("--space-id") + } + if err := validateWikiNodeListSpaceID(spaceID); err != nil { + return wikiNodeListSpec{}, err + } + + parentNodeToken, err := normalizeWikiNodeListParentToken(strings.TrimSpace(runtime.Str("parent-node-token"))) + if err != nil { + return wikiNodeListSpec{}, err + } + return wikiNodeListSpec{SpaceID: spaceID, ParentNodeToken: parentNodeToken}, nil +} + +func validateWikiNodeListSpaceID(spaceID string) error { + if spaceID == "" { + return errs.NewValidationError(errs.SubtypeInvalidArgument, "--space-id is required").WithParam("--space-id") + } + if spaceID == wikiMyLibrarySpaceID { + return nil + } + if strings.Contains(spaceID, "://") || strings.ContainsAny(spaceID, "/?#") { + return errs.NewValidationError(errs.SubtypeInvalidArgument, + "--space-id must be a numeric wiki space_id, not a URL or path", + ).WithParam("--space-id").WithHint("Run `lark-cli wiki +space-list --as user` to discover space IDs.") + } + if !isDecimalWikiSpaceID(spaceID) { + return errs.NewValidationError(errs.SubtypeInvalidArgument, + "--space-id must be a numeric wiki space_id; do not pass a wiki node token, document token, or title", + ).WithParam("--space-id").WithHint("Run `lark-cli wiki +space-list --as user` to list accessible wiki spaces, then pass the numeric `space_id`.") + } + if err := validateOptionalResourceName(spaceID, "--space-id"); err != nil { + return err + } + return nil +} + +func isDecimalWikiSpaceID(value string) bool { + if value == "" { + return false + } + for _, r := range value { + if r < '0' || r > '9' { + return false + } + } + return true +} + +func normalizeWikiNodeListParentToken(parentNodeToken string) (string, error) { + if parentNodeToken == "" { + return "", nil + } + if strings.Contains(parentNodeToken, "://") { + ref, ok := common.ParseResourceURL(parentNodeToken) + if !ok { + return "", errs.NewValidationError(errs.SubtypeInvalidArgument, + "--parent-node-token URL is unsupported", + ).WithParam("--parent-node-token").WithHint("Pass a raw wiki node token from `wiki +node-get` or `wiki +node-list`.") + } + if ref.Type != "wiki" { + return "", errs.NewValidationError(errs.SubtypeInvalidArgument, + "--parent-node-token must identify a wiki node; got a %s URL", + ref.Type, + ).WithParam("--parent-node-token").WithHint("Resolve the document URL with `lark-cli wiki +node-get --node-token <url>` and use its `node_token`.") + } + parentNodeToken = ref.Token + } + if strings.ContainsAny(parentNodeToken, "/?#") { + return "", errs.NewValidationError(errs.SubtypeInvalidArgument, + "--parent-node-token must be a raw wiki node token, not a partial URL or path", + ).WithParam("--parent-node-token") + } + if err := validateOptionalResourceName(parentNodeToken, "--parent-node-token"); err != nil { + return "", err + } + return parentNodeToken, nil +} + +func fetchWikiNodes(runtime *common.RuntimeContext, spaceID, parentNodeToken string) ([]map[string]interface{}, bool, string, error) { pageSize := runtime.Int("page-size") startToken := strings.TrimSpace(runtime.Str("page-token")) - parentNodeToken := strings.TrimSpace(runtime.Str("parent-node-token")) auto := wikiListShouldAutoPaginate(runtime) pageLimit := runtime.Int("page-limit") @@ -153,7 +238,7 @@ func fetchWikiNodes(runtime *common.RuntimeContext, spaceID string) ([]map[strin } data, err := runtime.CallAPITyped("GET", apiPath, params, nil) if err != nil { - return nil, false, "", err + return nil, false, "", wikiNodeListProblem(err, runtime) } items, _ := data["items"].([]interface{}) for _, item := range items { @@ -177,6 +262,36 @@ func fetchWikiNodes(runtime *common.RuntimeContext, spaceID string) ([]map[strin return nodes, lastHasMore, lastPageToken, nil } +func wikiNodeListProblem(err error, runtime *common.RuntimeContext) error { + p, ok := errs.ProblemOf(err) + if !ok { + return err + } + switch p.Code { + case 131002: + msg := strings.ToLower(p.Message) + switch { + case strings.Contains(msg, "page_token"): + appendWikiProblemHint(err, "The page token is invalid or stale. Use only the `page_token` returned by the immediately preceding `wiki +node-list` response, or omit --page-token and start over.") + case strings.Contains(msg, "space_id"): + appendWikiProblemHint(err, "The --space-id value must be the numeric wiki space_id from `wiki +space-list`; do not pass a wiki URL, node token, document token, or title.") + default: + appendWikiProblemHint(err, "Check the wiki +node-list flags. Fix the parameter before retrying; this is not a transient error.") + } + case 131005: + appendWikiProblemHint(err, "The target wiki space or parent node was not found. Re-discover the space with `wiki +space-list` and the parent with `wiki +node-list`/`wiki +node-get`; do not retry the same stale token.") + case 131006: + if runtime != nil && runtime.As().IsBot() { + appendWikiProblemHint(err, "The bot/app identity cannot read this wiki space or node. Grant the app the required wiki scope and ensure the app or bot has access to the target knowledge space.") + } else { + appendWikiProblemHint(err, "The current user cannot read this wiki space or node. Switch to a user with access or ask the space owner to grant read permission.") + } + case 99991400: + appendWikiProblemHint(err, "Rate limited by the wiki API. Stop immediate retries and retry later with exponential backoff or a smaller --page-limit.") + } + return err +} + func wikiNodeListItem(m map[string]interface{}) map[string]interface{} { return map[string]interface{}{ "space_id": common.GetString(m, "space_id"), diff --git a/skill-template/domains/approval.md b/skill-template/domains/approval.md index c79be9e43..f42653884 100644 --- a/skill-template/domains/approval.md +++ b/skill-template/domains/approval.md @@ -1,23 +1,77 @@ -所有命令默认 `--as user`(审批是人的动作)。调用前先 `lark-cli schema approval.<resource>.<method>` 查参数结构,不要猜字段。 +所有命令默认 `--as user`(审批是人的动作)。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段。 + +## 路由优先级(先判断是不是审批,再选命令) + +审批待办不是飞书任务。**只要用户的核心对象是审批单据 / 审批待办 / 审批实例,就优先使用 `lark-approval`,不要让渡给 `lark-task`。** + +### 明确归 `lark-approval` 的高优先级语义 + +出现以下任一语义时,优先走 `lark-approval`: + +- 审批待办 / 审批单据 / 审批实例 / 审批意见 / 审批定义 +- 同意 / 拒绝 / 转交 / 退回 / 撤回 / 催办 / 加签 / 抄送 +- 待办列表 / 待办单据 / 已发起审批 / 已办审批 / 审批详情 / 同意可编辑 + +**判定规则:** 只要最终动作是对审批单据做同意、拒绝、转交、退回、撤回、催办、加签、抄送、查详情、查已发起/已办/待办,就归 `lark-approval`。只有当用户处理的是**非审批类任务/待办**时,才走 [`lark-task`](../lark-task/SKILL.md)。 ## 选哪个命令 -| 想做什么 | 命令 | -|---|---| -| 搜可发起定义 | `approvals search` | -| 看审批定义详情/提单前确认表单与流程 | `approvals get` | -| 发起原生审批实例 | `instances create` | -| 查待办/已办 | `tasks query`(`topic`:1待办 2已办 17未读 18已读)| -| 看表单/进度/当前节点 | `instances get` | -| 同意/拒绝 | `tasks approve` / `tasks reject` | -| 转交/加签/退回 | `tasks transfer` / `tasks add_sign` / `tasks rollback` | -| 催办 | `tasks remind` | -| 撤回/抄送/按定义查已发起 | `instances cancel` / `instances cc` / `instances initiated` | +| 想做什么 | 命令 | 按需读取 reference | +|---|---|---------------------------------------------------------------------------------| +| 搜可发起定义 | `approvals search` | [`lark-approval-approvals-search.md`](references/lark-approval-approvals-search.md) | +| 看审批定义详情/提单前确认表单与流程 | `approvals get` | [`lark-approval-approvals-get.md`](references/lark-approval-approvals-get.md) | +| 发起原生审批实例/提交请假审批/提交报销审批/创建审批实例 | `instances create` | [`lark-approval-initiate.md`](references/lark-approval-initiate.md) | +| 查待办/已办 | `tasks query`(`topic`:1待办 2已办 17未读 18已读) | [`lark-approval-tasks-query.md`](references/lark-approval-tasks-query.md) | +| 看表单/进度/当前节点 | `instances get` | [`lark-approval-instances-get.md`](references/lark-approval-instances-get.md) | +| 同意审批 | `tasks approve` | [`lark-approval-tasks-approve.md`](references/lark-approval-tasks-approve.md) | +| 拒绝审批 | `tasks reject` | [`lark-approval-tasks-reject.md`](references/lark-approval-tasks-reject.md) | +| 转交审批 | `tasks transfer` | [`lark-approval-tasks-transfer.md`](references/lark-approval-tasks-transfer.md) | +| 加签审批 | `tasks add_sign` | [`lark-approval-tasks-add-sign.md`](references/lark-approval-tasks-add-sign.md) | +| 退回审批 | `tasks rollback` | [`lark-approval-tasks-rollback.md`](references/lark-approval-tasks-rollback.md) | +| 催办审批 | `tasks remind` | [`lark-approval-tasks-remind.md`](references/lark-approval-tasks-remind.md) | +| 撤回已发起审批 | `instances cancel` | [`lark-approval-instances-cancel.md`](references/lark-approval-instances-cancel.md) | +| 给审批实例追加抄送 | `instances cc` | [`lark-approval-instances-cc.md`](references/lark-approval-instances-cc.md) | +| 按定义查已发起审批 | `instances initiated` | [`lark-approval-instances-initiated.md`](references/lark-approval-instances-initiated.md) | 处理链: -- 发起审批:`approvals search` -> `approvals get` -> `instances.create` -- 处理审批:`tasks query` 拿 `instance_code` + `task_id`(操作必须成对带上)→ 需要细节再 `instances get` → 执行操作 +- 发起审批:`approvals search` -> `approvals get` -> `instances create` +- 处理审批:`tasks query` 拿 `instance_code` + `task_id`(操作必须成对带上)→ 只有用户明确需要查看详情、当前节点、表单内容、或流程进度时,再 `instances get` → 执行操作 + +## 执行原则(减少误路由、误重试和无效消耗) + +### 1) 先拿最小必要信息,再执行 + +- 目标只是处理待办时,优先 `tasks query` 获取 `instance_code` + `task_id` +- **只有**用户明确要看详情、当前节点、表单内容、流程进度时,才调用 `instances get` +- 用户已经明确给出 `instance_code` / `task_id` 时,不要先查列表再过滤 + +### 2) 已知对象时直达动作 + +- 已拿到 `instance_code` + `task_id` 后,优先直接执行 `tasks approve/reject/transfer/add_sign/rollback/remind` +- 同一轮里如果已有足够的新鲜查询结果,不要重复 `tasks query` +- 不要默认走 `list -> filter -> detail -> write` 全链路;对象已明确时应压缩步骤 + +### 3) 错误码驱动,而不是盲目重试 + +- 写操作失败后,先看错误码和报错语义,再决定是否补查或结束 +- **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个写操作** +- 同一个失败原因不要连续多次重试,避免 token 和耗时失控,最多重试1次 + +## 写操作失败处理:1395001 决策树 + +当拒绝 / 转交 / 退回 / 撤回 / 同意等写操作返回 `1395001`(任务状态异常 / 写前置校验失败)时,按下面规则处理: + +1. **先停止盲目重试**,不要连续重复提交相同写操作,最多重试1次 +2. 优先从以下角度解释: + - 任务可能已被他人处理 + - 单据状态已变化,当前动作已不再允许 + - 当前用户已不具备该任务的操作资格 + - 当前节点或单据状态不支持该操作 +3. 如需确认,只补 **一次** 状态查询(`tasks query` 或 `instances get`),不要陷入 query/write 循环 +4. 最终给用户明确结论和下一步建议,而不是继续无意义重试 + +**特别注意:** 对拒绝 / 转交 / 撤回场景更要严格执行上述规则;这些场景最容易因状态切换而失败。 ```bash lark-cli approval approvals search --data '{"keyword":"请假"}' --as user @@ -27,14 +81,6 @@ lark-cli approval tasks query --params '{"topic":"1"}' --as user lark-cli approval tasks approve --data '{"instance_code":"<ic>","task_id":"<tid>","comment":"同意"}' --as user ``` -## 发起原生审批 +## 不在本 skill 范围 -发起审批属于高风险写操作,按下表处理: - -| 规则 | 处理 | -|---|---| -| 用户意图是发起审批 / 提单 / 提交请假审批 / 提交报销审批 / 创建审批实例 | 先读 [`references/lark-approval-initiate.md`](references/lark-approval-initiate.md)、[`references/lark-approval-instance-form-control-parameters.md`](references/lark-approval-instance-form-control-parameters.md) 和 [`references/lark-approval-instance-value-sourcing.md`](references/lark-approval-instance-value-sourcing.md),并运行 `lark-cli schema approval.instances.create` | -| 编排顺序 | 固定走 `approvals.search` -> `approvals.get` -> `instances.create`;未拿到定义详情前不要猜 `form`、`node_approver_list` 或 `node_cc_list` | -| 三方定义 | `is_external=true` 时不要调用 `approval instances create`,返回 `create_link` 并说明需通过链接发起 | -| 表单与节点参数 | 控件 `value` 结构看 [`references/lark-approval-instance-form-control-parameters.md`](references/lark-approval-instance-form-control-parameters.md);值来源看 [`references/lark-approval-instance-value-sourcing.md`](references/lark-approval-instance-value-sourcing.md) | -| 真正执行前 | 让用户确认最终定义、表单值和节点参数;执行时显式传 `--yes`,成功后回报 `instance_code` 与 `instance_link` | +创建审批定义(走飞书客户端或审批管理后台);三方定义发起(返回 `create_link`,引导用户通过链接发起);非审批类待办 → [`lark-task`](../lark-task/SKILL.md) diff --git a/skill-template/domains/drive.md b/skill-template/domains/drive.md index 99fbabce2..1c56da819 100644 --- a/skill-template/domains/drive.md +++ b/skill-template/domains/drive.md @@ -6,6 +6,7 @@ - 用户要把本地 `.xlsx` / `.csv` / `.base` 导入成 Base / 多维表格 / bitable,第一步必须使用 `lark-cli drive +import --type bitable`。 - 用户要把本地 `.md` / `.docx` / `.doc` / `.txt` / `.html` 导入成在线文档,使用 `lark-cli drive +import --type docx`。 - 用户要把本地 `.xlsx` / `.xls` / `.csv` 导入成电子表格,使用 `lark-cli drive +import --type sheet`。 +- 批量执行 `drive +import` 且目标是同一个位置(同一 `--folder-token`、默认根目录,或同一 `--target-token`)时,必须串行执行;不要并发导入到同一位置,服务端可能返回并发冲突错误。 - 用户要在云空间里新建文件夹,优先使用 `lark-cli drive +create-folder`。 - `lark-base` 只负责导入完成后的 Base 内部操作(表、字段、记录、视图),不要在“本地文件 -> Base”这一步提前切到 `lark-base`。 @@ -194,6 +195,7 @@ lark-cli drive file.comments list --params '{"file_token": "xxx", "file_type": " | `not exist` | 使用了错误的 token | 检查 token 类型,wiki 链接必须先查询获取 `obj_token` | | `permission denied` | 没有相关操作权限 | 引导用户检查当前身份对文档/文件是否有相应操作权限;如果需要,可以授予相应权限 | | `invalid file_type` | file_type 参数错误 | 根据 `obj_type` 传入正确的 file_type(docx/doc/sheet/slides/bitable) | +| `232140101` / `232140100` / `233523001`(常见于 `drive +import` 的 `job_error_msg`) | 同一位置下存在并发导入 / 创建操作 | 批量导入到同一文件夹、根目录或同一 `--target-token` 时改为串行执行;每个失败项每次重试前等待几秒,总共最多重试 3 次,仍失败就停止并报告冲突 | ### 授权当前应用访问文档 diff --git a/skill-template/domains/mail.md b/skill-template/domains/mail.md index a884f18a1..cd918be54 100644 --- a/skill-template/domains/mail.md +++ b/skill-template/domains/mail.md @@ -65,7 +65,7 @@ 1. `+triage --from spam@x.com` → 列出 N 条结果 2. 展示:"将删除 N 封邮件(发件人 spam@x.com,主题:…),确认?" -3. 用户确认后 → `*.batch_trash` +3. 用户确认后 → `+message-trash --message-ids ... --yes` ## 身份选择:优先使用 user 身份 @@ -82,12 +82,13 @@ 1. **确认身份** — 首次操作邮箱前先调用 `lark-cli mail user_mailboxes profile --params '{"user_mailbox_id":"me"}'` 获取当前用户的真实邮箱地址(`primary_email_address`),不要通过系统用户名猜测。后续判断"发件人是否为用户本人"时以此地址为准。 2. **浏览** — `+triage` 查看收件箱摘要,获取 `message_id` / `thread_id` 3. **阅读** — `+message` 读单封邮件,`+thread` 读整个会话 -4. **回复** — `+reply` / `+reply-all`(默认存草稿,加 `--confirm-send` 则立即发送) -5. **转发** — `+forward`(默认存草稿,加 `--confirm-send` 则立即发送) -6. **新邮件** — `+send` 存草稿(默认),加 `--confirm-send` 发送 -7. **确认投递** — 立即发送后用 `send_status` 查询投递状态,定时发送后在预定时间后再查询;取消定时发送用 `cancel_scheduled_send` -8. **编辑草稿** — `+draft-edit` 修改已有草稿。正文编辑通过 `--patch-file`:回复/转发草稿用 `set_reply_body` op 保留引用区,普通草稿用 `set_body` op -9. **已读回执** — +4. **整理** — 标签、已读/未读状态和移动文件夹优先用 `+message-modify`;软删除优先用 `+message-trash` +5. **回复** — `+reply` / `+reply-all`(默认存草稿,加 `--confirm-send` 则立即发送) +6. **转发** — `+forward`(默认存草稿,加 `--confirm-send` 则立即发送) +7. **新邮件** — `+send` 存草稿(默认),加 `--confirm-send` 发送 +8. **确认投递** — 立即发送后用 `send_status` 查询投递状态,定时发送后在预定时间后再查询;取消定时发送用 `cancel_scheduled_send` +9. **编辑草稿** — `+draft-edit` 修改已有草稿。正文编辑通过 `--patch-file`:回复/转发草稿用 `set_reply_body` op 保留引用区,普通草稿用 `set_body` op +10. **已读回执** — - **请求回执(写信侧)**:`--request-receipt` 仅在**用户显式要求**时添加,**不要从 subject / body 内容推断意图**。 - **响应回执(拉信侧)**:拉信看到 `label_ids` 含 `READ_RECEIPT_REQUEST`(或 `-607`)时,**必须先问用户**是否回执(不要自动回执,涉及隐私)。用户同意 → `+send-receipt` 响应;用户不同意但想消掉提示 → `+decline-receipt` 只清本地标签、不发邮件。 @@ -417,7 +418,7 @@ lark-cli mail +message --message-id <id> ## 原生 API 调用规则 -没有 Shortcut 覆盖的操作才使用原生 API。调用步骤以本节为准(API Resources 章节的 resource/method 列表可辅助查阅)。 +没有 Shortcut 覆盖的操作才使用原生 API。标签、已读状态、移动文件夹优先使用 `+message-modify`;软删除优先使用 `+message-trash`。调用步骤以本节为准(API Resources 章节的 resource/method 列表可辅助查阅)。 ### Step 1 — 用 `-h` 确定要调用的 API(必须,不可跳过) diff --git a/skills/lark-approval/SKILL.md b/skills/lark-approval/SKILL.md index 04b9403cb..94862ce0a 100644 --- a/skills/lark-approval/SKILL.md +++ b/skills/lark-approval/SKILL.md @@ -8,28 +8,83 @@ metadata: cliHelp: "lark-cli approval --help" --- + **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理** -所有命令默认 `--as user`(审批是人的动作)。调用前先 `lark-cli schema approval.<resource>.<method>` 查参数结构,不要猜字段。 +所有命令默认 `--as user`(审批是人的动作)。调用前先按需读取 references 下对应的文件,查参数结构,不要猜字段;**references 是第一信息源**,只有在 reference 未覆盖的原生 / 高级场景下,才额外用 `lark-cli ... --help`、`lark-cli schema` 等方式补充确认字段。 + +## 路由优先级(先判断是不是审批,再选命令) + +审批待办不是飞书任务。**只要用户的核心对象是审批单据 / 审批待办 / 审批实例,就优先使用 `lark-approval`,不要让渡给 `lark-task`。** + +### 明确归 `lark-approval` 的高优先级语义 + +出现以下任一语义时,优先走 `lark-approval`: + +- 审批待办 / 审批单据 / 审批实例 / 审批意见 / 审批定义 +- 同意 / 拒绝 / 转交 / 退回 / 撤回 / 催办 / 加签 / 抄送 +- 待办列表 / 待办单据 / 已发起审批 / 已办审批 / 审批详情 / 同意可编辑 + +**判定规则:** 只要最终动作是对审批单据做同意、拒绝、转交、退回、撤回、催办、加签、抄送、查详情、查已发起/已办/待办,就归 `lark-approval`。只有当用户处理的是**非审批类任务/待办**时,才走 [`lark-task`](../lark-task/SKILL.md)。 ## 选哪个命令 -| 想做什么 | 命令 | -|---|---| -| 搜可发起定义 | `approvals search` | -| 看审批定义详情/提单前确认表单与流程 | `approvals get` | -| 发起原生审批实例 | `instances create` | -| 查待办/已办 | `tasks query`(`topic`:1待办 2已办 17未读 18已读)| -| 看表单/进度/当前节点 | `instances get` | -| 同意/拒绝 | `tasks approve` / `tasks reject` | -| 转交/加签/退回 | `tasks transfer` / `tasks add_sign` / `tasks rollback` | -| 催办 | `tasks remind` | -| 撤回/抄送/按定义查已发起 | `instances cancel` / `instances cc` / `instances initiated` | +| 想做什么 | 命令 | 按需读取 reference | +|---|---|---------------------------------------------------------------------------------| +| 搜可发起定义 | `approvals search` | [`lark-approval-approvals-search.md`](references/lark-approval-approvals-search.md) | +| 看审批定义详情/提单前确认表单与流程 | `approvals get` | [`lark-approval-approvals-get.md`](references/lark-approval-approvals-get.md) | +| 发起原生审批实例/提交请假审批/提交报销审批/创建审批实例 | `instances create` | [`lark-approval-initiate.md`](references/lark-approval-initiate.md) | +| 查待办/已办 | `tasks query`(`topic`:1待办 2已办 17未读 18已读) | [`lark-approval-tasks-query.md`](references/lark-approval-tasks-query.md) | +| 看表单/进度/当前节点 | `instances get` | [`lark-approval-instances-get.md`](references/lark-approval-instances-get.md) | +| 同意审批 | `tasks approve` | [`lark-approval-tasks-approve.md`](references/lark-approval-tasks-approve.md) | +| 拒绝审批 | `tasks reject` | [`lark-approval-tasks-reject.md`](references/lark-approval-tasks-reject.md) | +| 转交审批 | `tasks transfer` | [`lark-approval-tasks-transfer.md`](references/lark-approval-tasks-transfer.md) | +| 加签审批 | `tasks add_sign` | [`lark-approval-tasks-add-sign.md`](references/lark-approval-tasks-add-sign.md) | +| 退回审批 | `tasks rollback` | [`lark-approval-tasks-rollback.md`](references/lark-approval-tasks-rollback.md) | +| 催办审批 | `tasks remind` | [`lark-approval-tasks-remind.md`](references/lark-approval-tasks-remind.md) | +| 撤回已发起审批 | `instances cancel` | [`lark-approval-instances-cancel.md`](references/lark-approval-instances-cancel.md) | +| 给审批实例追加抄送 | `instances cc` | [`lark-approval-instances-cc.md`](references/lark-approval-instances-cc.md) | +| 按定义查已发起审批 | `instances initiated` | [`lark-approval-instances-initiated.md`](references/lark-approval-instances-initiated.md) | 处理链: -- 发起审批:`approvals search` -> `approvals get` -> `instances.create` -- 处理审批:`tasks query` 拿 `instance_code` + `task_id`(操作必须成对带上)→ 需要细节再 `instances get` → 执行操作 +- 发起审批:`approvals search` -> `approvals get` -> `instances create` +- 处理审批:`tasks query` 拿 `instance_code` + `task_id`(操作必须成对带上)→ 只有用户明确需要查看详情、当前节点、表单内容、或流程进度时,再 `instances get` → 执行操作 + +## 执行原则(减少误路由、误重试和无效消耗) + +### 1) 先拿最小必要信息,再执行 + +- 目标只是处理待办时,优先 `tasks query` 获取 `instance_code` + `task_id` +- **只有**用户明确要看详情、当前节点、表单内容、流程进度时,才调用 `instances get` +- 用户已经明确给出 `instance_code` / `task_id` 时,不要先查列表再过滤 + +### 2) 已知对象时直达动作 + +- 已拿到 `instance_code` + `task_id` 后,优先直接执行 `tasks approve/reject/transfer/add_sign/rollback/remind` +- 同一轮里如果已有足够的新鲜查询结果,不要重复 `tasks query` +- 不要默认走 `list -> filter -> detail -> write` 全链路;对象已明确时应压缩步骤 + +### 3) 错误码驱动,而不是盲目重试 + +- 写操作失败后,先看错误码和报错语义,再决定是否补查或结束 +- **除非错误明确提示可恢复或需要补充参数,否则不要重复刷同一个写操作** +- 同一个失败原因不要连续多次重试,避免 token 和耗时失控,最多重试1次 + +## 写操作失败处理:1395001 决策树 + +当拒绝 / 转交 / 退回 / 撤回 / 同意等写操作返回 `1395001`(任务状态异常 / 写前置校验失败)时,按下面规则处理: + +1. **先停止盲目重试**,不要连续重复提交相同写操作,最多重试1次 +2. 优先从以下角度解释: + - 任务可能已被他人处理 + - 单据状态已变化,当前动作已不再允许 + - 当前用户已不具备该任务的操作资格 + - 当前节点或单据状态不支持该操作 +3. 如需确认,只补 **一次** 状态查询(`tasks query` 或 `instances get`),不要陷入 query/write 循环 +4. 最终给用户明确结论和下一步建议,而不是继续无意义重试 + +**特别注意:** 对拒绝 / 转交 / 撤回场景更要严格执行上述规则;这些场景最容易因状态切换而失败。 ```bash lark-cli approval approvals search --data '{"keyword":"请假"}' --as user @@ -39,18 +94,6 @@ lark-cli approval tasks query --params '{"topic":"1"}' --as user lark-cli approval tasks approve --data '{"instance_code":"<ic>","task_id":"<tid>","comment":"同意"}' --as user ``` -## 发起原生审批 - -发起审批属于高风险写操作,按下表处理: - -| 规则 | 处理 | -|---|---| -| 用户意图是发起审批 / 提单 / 提交请假审批 / 提交报销审批 / 创建审批实例 | 先读 [`references/lark-approval-initiate.md`](references/lark-approval-initiate.md)、[`references/lark-approval-instance-form-control-parameters.md`](references/lark-approval-instance-form-control-parameters.md) 和 [`references/lark-approval-instance-value-sourcing.md`](references/lark-approval-instance-value-sourcing.md),并运行 `lark-cli schema approval.instances.create` | -| 编排顺序 | 固定走 `approvals.search` -> `approvals.get` -> `instances.create`;未拿到定义详情前不要猜 `form`、`node_approver_list` 或 `node_cc_list` | -| 三方定义 | `is_external=true` 时不要调用 `approval instances create`,返回 `create_link` 并说明需通过链接发起 | -| 表单与节点参数 | 控件 `value` 结构看 [`references/lark-approval-instance-form-control-parameters.md`](references/lark-approval-instance-form-control-parameters.md);值来源看 [`references/lark-approval-instance-value-sourcing.md`](references/lark-approval-instance-value-sourcing.md) | -| 真正执行前 | 让用户确认最终定义、表单值和节点参数;执行时显式传 `--yes`,成功后回报 `instance_code` 与 `instance_link` | - ## 不在本 skill 范围 创建审批定义(走飞书客户端或审批管理后台);三方定义发起(返回 `create_link`,引导用户通过链接发起);非审批类待办 → [`lark-task`](../lark-task/SKILL.md) diff --git a/skills/lark-approval/references/lark-approval-approvals-get.md b/skills/lark-approval/references/lark-approval-approvals-get.md new file mode 100644 index 000000000..cdd607e75 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-approvals-get.md @@ -0,0 +1,128 @@ + +# approval approvals get + +获取单个审批定义详情(用户级只读操作)。适合在发起审批实例前,先确认审批名称、表单控件结构、选项值范围以及流程节点信息。 + +需要的 scopes: ["approval:approval:read"] + +## 命令 + +```bash +# 按 approval_code 查询审批定义详情 +lark-cli approval approvals get --params '{"approval_code":"<APPROVAL_CODE>"}' --as user + +# 表格格式输出,便于快速浏览顶层字段 +lark-cli approval approvals get --params '{"approval_code":"<APPROVAL_CODE>"}' --format table --as user + +# 预览 API 调用,不执行 +lark-cli approval approvals get --params '{"approval_code":"<APPROVAL_CODE>"}' --as user --dry-run +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--params '{...}'` | 是 | 查询参数,使用 JSON 传入 | +| `approval_code` | 是 | 审批定义 Code;通常来自 `approval approvals search` 的结果 | +| `locale` | 否 | 返回语言,例如 `zh-CN`、`en-US`、`ja-JP` | +| `--as user` | 否 | 建议显式指定用户身份;审批定义详情通常按当前用户可见范围读取 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 常见输入来源 + +如果你已经有 `approval_code`,可直接查询: + +```bash +lark-cli approval approvals get --params '{"approval_code":"<APPROVAL_CODE>"}' --as user +``` + +如果你还没有 `approval_code`,先搜索可发起审批定义: + +```bash +lark-cli approval approvals search --data '{"keyword":"请假"}' --as user +``` + +## 输出重点字段 + +返回结果中,优先关注以下字段: + +| 字段 | 说明 | +|------|------| +| `approval_code` | 审批定义 Code | +| `approval_name` | 审批定义名称;确认是不是用户想发起的那张单 | +| `form` | 表单定义快照;用于识别控件 `id`、`type`、选项值范围、明细子控件结构 | +| `node_list` | 流程节点列表;用于识别节点 key、是否需要补充审批人、是否允许多人 | + +## form 的使用重点 + +`form` 最重要的作用是帮助 agent **识别怎么组装 `instances.create.data.form`**,而不是直接把它原样提交出去。 + +重点看: + +| 字段 / 结构 | 说明 | +|------|------| +| `form[].id` | 控件 ID;后续创建实例时必须使用 | +| `form[].type` | 控件类型,例如 `input`、`date`、`radio`、`checkbox`、`fieldList` | +| `form[].value` / 选项定义 | 用来识别可选值范围、默认值或选项值 | +| 明细 / 子控件结构 | 用于识别 `fieldList`、控件组等复杂控件的子字段结构 | + +**注意:`approvals.get.form` 不是 `instances.create` 可直接复用的 payload 模板。** 它是“定义快照”,主要用于识别字段结构与选项值范围。 + +## node_list 的使用重点 + +`node_list` 主要用于后续决定是否要补 `node_approver_list` / `node_cc_list`。 + +重点看: + +| 字段 | 说明 | +|------|------| +| `node_list[].custom_node_id` | 自定义节点标识;后续补节点参数时优先作为 key | +| `node_list[].node_id` | 节点 ID;若没有 `custom_node_id`,通常退回用它做 key | +| `node_list[].need_approver` | 是否要求发起人补充审批人 | +| `node_list[].approver_chosen_multi` | 是否允许为该节点选择多个审批人 | + +## 使用建议 + +- **这是发起原生审批实例前的必要只读步骤。** 推荐固定走:`approvals search` -> `approvals get` -> `instances create`。 +- **如果用户已经明确给了 `approval_code`,直接用这个命令。** 不必再走 `approvals search`。 +- **先确认 `approval_name`。** 避免把相似名称的审批定义搞混。 +- **先用 `form` 识别控件结构,再组装创建 payload。** 不要在未看详情时猜控件 `id`、`type` 或选项值。 +- **先用 `node_list` 看是否需要补审批人。** 若某节点 `need_approver=true`,创建实例时通常要补 `node_approver_list`。 +- **`node_list` 的 key 优先取 `custom_node_id`。** 若不存在,再使用 `node_id`。 +- **`approver_chosen_multi=false` 时,一个节点通常只能补一个审批人。** + +## 输出与后续操作 + +读取定义详情后,常见下一步: + +```bash +# 发起原生审批实例 +lark-cli approval instances create --data '{"approval_code":"<APPROVAL_CODE>","form":"[...]"}' --as user --yes +``` + +如果需要进一步理解控件取值与节点参数,优先参考: + +- `lark-approval-instance-form-control-parameters.md` +- `lark-approval-instance-value-sourcing.md` +- `lark-approval-initiate.md` + +## 结果整理方式 + +**将结果整理为“审批定义概览 + 表单结构摘要 + 节点要求摘要”。** + +建议输出成下面这种结构: + +```text +审批定义:请假申请 +approval_code: 7C468A54-8745-2245-9675-08B7C63E7A85 + +表单控件摘要: +- leave_type: radio,可选值 [annual_leave, sick_leave] +- reason: textarea +- start_end: dateInterval + +节点要求摘要: +- manager_node:need_approver=true,approver_chosen_multi=false +- hr_node:need_approver=false +``` diff --git a/skills/lark-approval/references/lark-approval-approvals-search.md b/skills/lark-approval/references/lark-approval-approvals-search.md new file mode 100644 index 000000000..3ef6ed76d --- /dev/null +++ b/skills/lark-approval/references/lark-approval-approvals-search.md @@ -0,0 +1,103 @@ + +# approval approvals search + +搜索**当前用户可发起**的审批定义(launchable approvals)。只读操作,不会创建审批实例。 + +需要的 scopes: ["approval:approval:read"] + +## 命令 + +```bash +# 按关键词搜索可发起审批定义 +lark-cli approval approvals search --data '{"keyword":"请假"}' --as user + +# 使用 page_token 翻页 +lark-cli approval approvals search --data '{"keyword":"请假", "page_token":"example_page_token"}' --as user + +# 表格格式输出,便于快速浏览候选定义 +lark-cli approval approvals search --data '{"keyword":"出差"}' --format table --as user + +# 预览 API 调用,不执行 +lark-cli approval approvals search --data '{"keyword":"请假"}' --as user --dry-run +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 查询参数,使用 JSON 传入 | +| `keyword` | 是 | 搜索关键词,例如 `请假`、`报销`、`出差`、`采购` | +| `locale` | 否 | 返回语言,例如 `zh-CN`、`en-US`、`ja-JP` | +| `page_size` | 否 | 分页大小 | +| `page_token` | 否 | 翻页标记;首次请求不填,后续使用上一次返回的 `page_token` | +| `--as user` | 否 | 建议显式指定用户身份;“可发起审批定义”是面向当前用户的查询 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 这个命令解决什么问题 + +当用户只有自然语言意图,还没有 `approval_code` 时,先用它把“可发起的审批定义候选项”找出来。 + +典型场景: + +- “帮我找一下请假审批” +- “有哪些可以发起的报销单?” +- “先搜一下出差审批,再帮我提单” + +## 输出重点字段 + +返回结果里,优先关注以下字段: + +| 字段 | 说明 | +|------|------| +| `approval_code` | 审批定义 Code;后续 `approvals get` 和 `instances create` 都要用它 | +| `approval_name` | 审批定义名称;给用户做候选选择时最关键 | +| `is_external` | 是否为三方审批定义;`true` 表示不能走原生 `instances.create` | +| `create_link` | 三方审批定义的发起链接;`is_external=true` 时优先返回给用户 | + +## 使用规则 + +- **这是发起审批工作流的第一步。** 标准顺序是:`approvals search` -> `approvals get` -> `instances create`。 +- **搜索结果为空时,不要猜。** 直接告诉用户当前关键词下没有可发起定义,并建议用户换关键词。 +- **命中多个结果时,不要替用户拍板。** 先把候选定义列出来,让用户选择目标审批定义。 +- **`is_external=true` 时不要调用 `approval instances create`。** 这类定义属于三方审批,优先返回 `create_link` 并说明需要通过链接发起。 +- **只有 `is_external=false` 的原生定义,才继续 `approvals get`。** +- **如果用户已经明确给出 `approval_code`,不要再 search。** 直接执行 `approval approvals get`。 + +## 结果整理方式 + +**将结果整理为候选清单,优先展示“名称 + approval_code + 是否三方定义 + 下一步建议”。** + +建议输出成下面这种结构: + +```text +找到 3 个可发起审批定义: + +1. 请假申请 + - approval_code: 7C468A54-8745-2245-9675-08B7C63E7A85 + - is_external: false + - next: 可继续读取 definitions 详情(approvals get) + +2. 差旅报销 + - approval_code: 99887766-xxxx + - is_external: true + - next: 返回 create_link,引导用户通过链接发起 +``` + +## 常见后续操作 + +### 1)用户选中了某个定义,继续查看详情 + +```bash +lark-cli approval approvals get --params '{"approval_code":"<APPROVAL_CODE>"}' --as user +``` + +### 2)确认是原生定义后,再准备发起审批实例 + +```bash +lark-cli approval instances create --data '{"approval_code":"<APPROVAL_CODE>","form":"[...]"}' --as user --yes +``` + +### 3)确认是三方定义时,直接返回链接 + +当 `is_external=true` 时,优先向用户返回 `create_link`,说明该审批需在三方系统或跳转页面中发起,而不是通过原生 `instances.create`。 diff --git a/skills/lark-approval/references/lark-approval-initiate.md b/skills/lark-approval/references/lark-approval-initiate.md index d5621a2c8..a8085f242 100644 --- a/skills/lark-approval/references/lark-approval-initiate.md +++ b/skills/lark-approval/references/lark-approval-initiate.md @@ -2,14 +2,15 @@ ## 执行摘要 -- **原生审批提单必须固定走 `approvals.search` -> `approvals.get` -> `instances.create`。** 不要跳过 `get` 直接拼请求。 -- **`is_external=true` 的定义是三方定义。** 这类定义不要调用 `instances.create`,应优先使用 `create_link`。 +- **原生审批提单如果用户未明确给出 `approval_code`,必须固定走 `approvals search` -> `approvals get` -> `instances create`** 不要跳过 `get` 直接拼请求。 +- **原生审批提单如果用户明确给出 `approval_code`,固定走 `approvals get` -> `instances create`** 不要跳过 `get` 直接拼请求。 +- **`is_external=true` 的定义是三方定义。** 这类定义不要调用 `instances create`,应优先使用 `create_link`。 - **所有人员类参数默认使用 `open_id`。** 若用户给的是姓名、邮箱或其他身份,先用 [`../../lark-contact/SKILL.md`](../../lark-contact/SKILL.md) 解析。 -- **先读控件参数 reference 和值来源 reference,再看 `schema`。** 提单前必须先阅读 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 和 [`lark-approval-instance-value-sourcing.md`](./lark-approval-instance-value-sourcing.md),并运行 `lark-cli schema approval.instances.create`。 -- **`approvals.get.form` 不是创建 payload 的原样模板。** 它主要用于识别控件 `id`、`type`、选项值范围和明细子控件结构;真正的 `instances.create.data.form` 中,请求字段与节点字段以 `schema` / `meta` 为准,控件 `value` 结构以 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 为准。 -- **节点参数只从 `node_list` 和 `schema` / `meta` 里取。** 节点 key 必须来自定义详情返回的节点标识;审批人/抄送人列表传用户 ID 时,要先与当前 `schema` 字段名和 ID 口径对齐,不要混用姓名或其他身份标识。 +- **先读控件参数 reference 和值来源 reference,再读本文里的创建参数规则。** 提单前必须先阅读 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 和 [`lark-approval-instance-value-sourcing.md`](./lark-approval-instance-value-sourcing.md)。 +- **`approvals.get.form` 不是创建 payload 的原样模板。** 它主要用于识别控件 `id`、`type`、选项值范围和明细子控件结构;真正的 `instances create --data.form` 中,控件 `value` 结构以 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 为准。 +- **节点参数只从 `node_list` 和本文里的节点参数规则里取。** 节点 key 必须来自定义详情返回的节点标识;审批人/抄送人列表传用户 ID 时,不要混用姓名或其他身份标识。 - **看到 `need_approver=true` 就说明该节点需要发起人补充审批人。** 如果 `approver_chosen_multi=false`,该节点只允许一个 `open_id`。 -- **创建实例前先确认。** `approval instances create` 是写操作,真正执行时显式传 `--yes`。 +- **创建实例前先确认。** `approval instances create` 是写操作,执行前,让用户确认最终定义、表单值和节点参数;真正执行时显式传 `--yes`。 ## 适用场景 @@ -20,11 +21,10 @@ ## 严禁行为 -- **严禁在未先查看 `schema` 的情况下猜测 `--data` 结构。** -- **严禁在未先阅读 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md)、[`lark-approval-instance-value-sourcing.md`](./lark-approval-instance-value-sourcing.md) 且未先查看 `schema` 的情况下直接提单。** -- **严禁跳过 `approvals.get`。** 未拿到 `form` 和 `node_list` 前,不得调用 `instances.create`。 +- **严禁在未先阅读本文中的创建参数规则、[`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 和 [`lark-approval-instance-value-sourcing.md`](./lark-approval-instance-value-sourcing.md) 的情况下直接提单。** +- **严禁跳过 `approvals.get`。** 未拿到 `form` 和 `node_list` 前,不得调用 `instances create`。 - **严禁把姓名直接写进 `node_approver_list`、`node_cc_list` 或表单人员控件。** 必须先转成 `open_id`。 -- **严禁对三方定义调用 `instances.create`。** +- **严禁对三方定义调用 `instances create`。** - **严禁对 API 不支持的控件硬提单。** 如果目标定义包含创建实例 API 不支持的控件,应明确告诉用户该定义不能仅通过 API 完整发起。 - **严禁把 `approvals.get.form` 当成可直接提交的原样模板。** - **严禁在未得到用户确认前直接执行真实提单。** @@ -33,10 +33,9 @@ ### 1. 搜索可发起审批定义 -先用 `schema` 看参数,再搜索定义: +先搜索定义: ```bash -lark-cli schema approval.approvals.search lark-cli approval approvals search --data '{"keyword":"请假"}' ``` @@ -44,7 +43,7 @@ lark-cli approval approvals search --data '{"keyword":"请假"}' - 若结果为空,告诉用户当前关键词下没有可发起定义。 - 若命中多个定义,必须把候选项列给用户选择,不要自行猜测。 -- 若目标定义 `is_external=true`,优先返回 `create_link`,说明这是三方定义,不能走原生 `instances.create`。 +- 若目标定义 `is_external=true`,优先返回 `create_link`,说明这是三方定义,不能走原生 `instances create`。 - 只有 `is_external=false` 的原生定义才继续下一步。 ### 2. 获取审批定义详情 @@ -52,7 +51,6 @@ lark-cli approval approvals search --data '{"keyword":"请假"}' 拿到 `approval_code` 后,读取定义详情: ```bash -lark-cli schema approval.approvals.get lark-cli approval approvals get \ --params '{"approval_code":"7C468A54-8745-2245-9675-08B7C63E7A85"}' ``` @@ -63,12 +61,30 @@ lark-cli approval approvals get \ - `form`: 表单定义快照,用于识别控件 `id`、`type`、选项值范围以及明细子控件结构;不是创建实例时可直接原样提交的 payload 模板。 - `node_list`: 流程节点信息,是后续 `node_approver_list` / `node_cc_list` 的唯一可靠来源。 -### 3. 组装 `form` +### 3. 创建请求参数速查 -`instances.create.data.form` 是一个 JSON 数组字符串。组装原则: +输入参数如下: -- 先用 `approvals.get.form` 识别有哪些控件、每个控件的 `id` / `type` / 可选值范围,再按 `schema` / `meta` 与 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 重新组装创建 payload。 -- 提交时必须至少保证每个控件的 `id`、`type` 与 `value` 符合当前 `schema` 要求;不要假设定义快照里出现的其他字段都能直接照搬。 +| 参数 | 必填 | 说明 | +|---|---|---| +| `--data '{...}'` | 是 | 请求体,使用 JSON 传入 | +| `approval_code` | 是 | 审批定义 Code;必须先通过 `approvals search` / `approvals get` 确认 | +| `form` | 是 | 表单值,**JSON 数组字符串**,不是普通对象 | +| `node_approver_list` | 否 | 节点审批人列表;仅在定义要求补充审批人时传 | +| `node_cc_list` | 否 | 节点抄送人列表;仅在用户明确需要补充节点抄送人时传 | +| `uuid` | 否 | 幂等标识;重复重试同一请求时建议显式传入 | +| `--params '{...}'` | 否 | 查询参数,使用 JSON 传入 | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id`;涉及人员类 ID 时建议显式传 `open_id` | +| `--as user` | 否 | 建议显式指定用户身份;审批发起通常应使用用户身份 | +| `--yes` | 是 | 写操作确认;真实执行时必须显式传入 | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +### 4. 组装 `form` + +`instances create --data.form` 是一个 JSON 数组字符串。组装原则: + +- 先用 `approvals.get.form` 识别有哪些控件、每个控件的 `id` / `type` / 可选值范围,再按本文中的创建参数规则与 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 重新组装创建 payload。 +- 提交时必须至少保证每个控件的 `id`、`type` 与 `value` 符合当前接口要求;不要假设定义快照里出现的其他字段都能直接照搬。 - 如果用户提供的是人员信息,优先转换成 `open_id` 后再写入对应控件。 - 单选/多选控件提交的是选项 `value`,该值可从 `approvals.get.form` 的选项定义中取得。 - `contact`、`department`、`fieldList`、`dateInterval`、`amount`、`telephone`、`document` 等控件的 `value` 结构各不相同,必须按 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 单独组装,不要套用文本控件的写法。 @@ -100,7 +116,7 @@ lark-cli approval approvals get \ - `input` / `textarea`: `value` 是字符串 - `date`: `value` 是 RFC3339 时间字符串 - `dateInterval`: `value` 是对象,包含 `start` / `end` / `interval` -- `radio` / `radioV2`: `value` 是单个选项值,取自定义详情里的 option.value;关联外部选项时传 `options.id` +- `radio` / `radioV2`: `value` 是单个选项值,取定义详情里的 `option.value`;关联外部选项时传 `options.id` - `checkbox` / `checkboxV2`: `value` 是选项值数组 - `number`: `value` 是数字 - `amount`: `value` 是数字,还要带 `currency` @@ -129,7 +145,7 @@ lark-cli approval approvals get \ - 再严格按 [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 的示例组装 `value` - 不要把控件组整体当成普通字符串或扁平对象提交 -### 4. 组装节点参数 +### 5. 组装节点参数 从 `node_list` 推导节点参数: @@ -139,13 +155,13 @@ lark-cli approval approvals get \ - 若 `approver_chosen_multi=false`,该节点只允许一个审批人 `open_id`。 - `node_cc_list` 仅在用户明确需要补充节点抄送人时才填写;其 `key/value` 规则与 `node_approver_list` 相同。 -### 5. 创建审批实例 +### 6. 创建审批实例 -先看 `schema`,确认最终结构后再执行: +创建命令使用 `approval instances create`,需要的 scopes: ["approval:instance:write"] + +确认最终表单值和节点参数后再执行: ```bash -lark-cli schema approval.instances.create - lark-cli approval instances create \ --data '{ "approval_code":"7C468A54-8745-2245-9675-08B7C63E7A85", @@ -157,6 +173,8 @@ lark-cli approval instances create \ } ] }' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ --yes ``` @@ -170,7 +188,7 @@ lark-cli approval instances create \ 优先级固定如下: -1. `lark-cli schema approval.instances.create` 与对应 `meta`:决定创建请求体有哪些字段、节点参数怎么传。 +1. 本文中的创建请求参数、节点参数和返回结果说明:决定 `instances create` 要传哪些字段、怎么执行、成功后回什么。 2. [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md):决定每种控件的 `value` 结构与支持范围。 3. [`lark-approval-instance-value-sourcing.md`](./lark-approval-instance-value-sourcing.md):决定每类值应该从哪里拿,以及当前哪些值必须由用户直接提供。 4. `approvals.get.form`:提供当前审批定义里实际有哪些控件、控件 `id`、控件 `type`、选项值范围、明细子控件结构。 @@ -184,8 +202,8 @@ lark-cli approval instances create \ |---|---| | 只有口语需求,比如“帮我提个请假审批” | 先 `approvals.search` | | 已经拿到 `approval_code` | 直接 `approvals.get` | -| 已拿到 `form` / `node_list`,且用户已给出表单值和审批人 | 组装 `instances.create` | -| `is_external=true` | 返回 `create_link`,不要调 `instances.create` | +| 已拿到 `form` / `node_list`,且用户已给出表单值和审批人 | 组装 `instances create` | +| `is_external=true` | 返回 `create_link`,不要调 `instances create` | ## 返回结果 @@ -194,3 +212,13 @@ lark-cli approval instances create \ - `approval_name` - `instance_code` - `instance_link` + +建议整理为下面这种结构: + +```text +审批已创建成功: + +- approval_name: 请假申请 +- instance_code: 19EAC829-F1CB-527F-BE2A-1330422E60C0 +- instance_link: https://... +``` diff --git a/skills/lark-approval/references/lark-approval-instance-value-sourcing.md b/skills/lark-approval/references/lark-approval-instance-value-sourcing.md index 30d7d9c3e..0bb0842eb 100644 --- a/skills/lark-approval/references/lark-approval-instance-value-sourcing.md +++ b/skills/lark-approval/references/lark-approval-instance-value-sourcing.md @@ -6,14 +6,14 @@ 阅读顺序固定如下: -1. `lark-cli schema approval.instances.create` +1. [`lark-approval-initiate.md`](./lark-approval-initiate.md) 中的创建请求参数、节点参数和返回结果说明 2. `approval approvals get` 返回的 `form` / `node_list` 3. [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 4. 本文 ## 总原则 -- `schema` / `meta` 决定请求字段名、字段层级、节点参数结构。 +- `lark-approval-initiate.md` 决定创建请求字段名、字段层级、节点参数结构。 - `approvals.get.form` 决定控件 `id`、`type`、选项值范围、子控件结构。 - `approvals.get.node_list` 决定节点 key、是否必须补审批人、是否允许多人。 - [`lark-approval-instance-form-control-parameters.md`](./lark-approval-instance-form-control-parameters.md) 决定各控件 `value` 的最终结构。 diff --git a/skills/lark-approval/references/lark-approval-instances-cancel.md b/skills/lark-approval/references/lark-approval-instances-cancel.md new file mode 100644 index 000000000..1d211eb70 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-instances-cancel.md @@ -0,0 +1,78 @@ + +# approval instances cancel + +撤回一个已发起的审批实例(用户级写操作)。通常先通过 `instances initiated`、`tasks query` 或 `instances get` 确认目标审批实例,拿到 `instance_code` 后再执行撤回。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要撤回该审批实例且目标实例无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:instance:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval instances cancel \ + --data '{"instance_code":"<INSTANCE_CODE>"}' \ + --as user \ + --dry-run + +# 撤回一个审批实例 +lark-cli approval instances cancel \ + --data '{"instance_code":"<INSTANCE_CODE>"}' \ + --as user \ + --yes + +# 通过文件传入请求体 +lark-cli approval instances cancel \ + --data @./cancel-body.json \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `instances initiated`、`tasks query` 或 `instances get` 获取 | +| `--as user` | 否 | 建议显式指定用户身份;审批实例撤回通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +如果你要找“我发起的审批实例”,可先查询已发起列表: + +```bash +lark-cli approval instances initiated --params '{"page_size":20}' --as user +``` + +如果你已经在任务列表中定位到某个审批,也可以从任务里拿到实例 Code: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的字段: + +| 字段 | 说明 | +|------|------| +| `instances[].instance_code` | 审批实例 Code;撤回时必须提供 | +| `tasks[].instance_code` | 审批任务关联的审批实例 Code;也可作为撤回输入 | +| `tasks[].instance_status` | 审批实例状态;可用于判断是否仍处于可撤回阶段 | + +如需先确认审批表单、当前节点、流转状态,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **撤回的是审批实例,不是单个任务**:`instances cancel` 只需要 `instance_code`,不需要 `task_id`。 +- **优先确认实例是否仍可撤回**:已经通过、已拒绝、已撤销或已终止的实例通常不适合继续撤回。 +- **优先从 `instances initiated` 获取目标实例**:因为撤回通常针对“我发起的审批”,这个入口最直接。 +- **也可从 `tasks query` 反查 `instance_code`**:当你是从某个待办/已办上下文进入时,这样更方便。 +- **先 `--dry-run` 再执行**:尤其在实例来源不明确、用户只给了标题关键字,或一次要核对多个实例时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-instances-cc.md b/skills/lark-approval/references/lark-approval-instances-cc.md new file mode 100644 index 000000000..6f0c295b4 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-instances-cc.md @@ -0,0 +1,105 @@ + +# approval instances cc + +给一个审批实例追加抄送人(用户级写操作)。通常先通过 `instances initiated`、`tasks query` 或 `instances get` 确认目标审批实例,拿到 `instance_code` 后,再提供抄送人的用户 ID 执行抄送。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要抄送该审批实例且目标实例、抄送对象都无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:instance:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval instances cc \ + --data '{"instance_code":"<INSTANCE_CODE>","cc_user_ids":["ou_xxx"],"comment":"抄送给项目 owner 了解进展"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --dry-run + +# 按 open_id 抄送一个人 +lark-cli approval instances cc \ + --data '{"instance_code":"<INSTANCE_CODE>","cc_user_ids":["ou_xxx"],"comment":"抄送给你知悉"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes + +# 一次抄送多个人 +lark-cli approval instances cc \ + --data '{"instance_code":"<INSTANCE_CODE>","cc_user_ids":["ou_xxx","ou_yyy"],"comment":"请相关同学同步关注"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes + +# 按 user_id 抄送 +lark-cli approval instances cc \ + --data '{"instance_code":"<INSTANCE_CODE>","cc_user_ids":["123456789"],"comment":"抄送给财务负责人"}' \ + --params '{"user_id_type":"user_id"}' \ + --as user \ + --yes + +# 通过文件传入请求体 +lark-cli approval instances cc \ + --data @./cc-body.json \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `instances initiated`、`tasks query` 或 `instances get` 获取 | +| `cc_user_ids` | 是 | 抄送人的用户 ID 数组;需要和 `user_id_type` 保持一致 | +| `comment` | 否 | 抄送留言,例如 `抄送给你知悉`、`请同步关注该审批进展` | +| `--params '{"user_id_type":"..."}'` | 否 | 查询参数 JSON;用于声明 `cc_user_ids` 内用户 ID 的类型 | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id`;未显式指定时要特别确认抄送人的 ID 类型 | +| `--as user` | 否 | 建议显式指定用户身份;审批实例抄送通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +如果你要找“我发起的审批实例”,可先查询已发起列表: + +```bash +lark-cli approval instances initiated --params '{"page_size":20}' --as user +``` + +如果你已经在任务列表中定位到某个审批,也可以从任务里拿到实例 Code: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的字段: + +| 字段 | 说明 | +|------|------| +| `instances[].instance_code` | 审批实例 Code;抄送时必须提供 | +| `tasks[].instance_code` | 审批任务关联的审批实例 Code;也可作为抄送输入 | +| `tasks[].title` | 任务标题,可用于确认是否是要操作的那个审批 | +| `tasks[].instance_status` | 审批实例状态;可用于判断当前审批是否仍处于进行中 | + +如果你手里只有姓名或邮箱,建议先通过联系人能力解析出正确的用户 ID,再执行抄送。 + +如需先确认审批表单、当前节点、流转状态,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **抄送的是审批实例,不是单个任务**:`instances cc` 只需要 `instance_code`,不需要 `task_id`。 +- **`cc_user_ids` 与 `user_id_type` 必须匹配**:例如传 open_id 就把 `user_id_type` 设为 `open_id`;不要混用。 +- **`cc_user_ids` 是数组**:即使只抄送一个人,也要按数组形式传入。 +- **优先显式传 `user_id_type`**:这样 agent 更容易判断参数含义,也能减少 ID 类型不匹配带来的失败。 +- **优先从 `instances initiated` 获取目标实例**:因为抄送常见于“我发起的审批”场景,这个入口最直接。 +- **也可从 `tasks query` 反查 `instance_code`**:当你是从某个审批上下文进入时,这样更方便。 +- **`comment` 建议简洁明确**:例如 `抄送给你知悉`、`请同步关注审批进展`。避免过长或模糊描述。 +- **先 `--dry-run` 再执行**:尤其在抄送对象较多、抄送人来源不明确,或需要让用户先核对实例标题时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-instances-get.md b/skills/lark-approval/references/lark-approval-instances-get.md new file mode 100644 index 000000000..06f7ea18f --- /dev/null +++ b/skills/lark-approval/references/lark-approval-instances-get.md @@ -0,0 +1,145 @@ + +# approval instances get + +获取单个审批实例详情(用户级只读操作)。适合在执行 approve / reject / transfer / rollback / cancel / cc / remind 之前,先查看审批表单、当前节点、任务列表、审批动态和整体状态。 + +需要的 scopes: ["approval:instance:read"] + +## 命令 + +```bash +# 按实例 Code 查询详情 +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user + +# 表格格式输出,便于快速浏览顶层字段 +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --format table --as user + +# 预览 API 调用,不执行 +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user --dry-run +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--params '{...}'` | 是 | 查询参数,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code | +| `locale` | 否 | 返回语言,例如 `zh-CN`、`en-US`、`ja-JP` | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id` | +| `--as user` | 否 | 建议显式指定用户身份;审批实例详情查询通常应使用用户身份 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 常见输入来源 + +如果你已经有实例 Code,可直接查询: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +如果你还没有实例 Code,可先从以下命令获取: + +```bash +# 查询我发起的审批实例 +lark-cli approval instances initiated --params '{"page_size":20}' --as user + +# 或从任务列表里拿到关联实例 Code +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +## 输出重点字段 + +返回结果中常见字段: + +| 字段 | 说明 | +|------|------| +| `instance_code` | 审批实例 Code | +| `serial_number` | 审批单编号 | +| `definition_code` | 审批定义 Code | +| `definition_name` | 审批名称 | +| `user_id` | 发起审批的用户 ID | +| `department_id` | 发起人所在部门 ID | +| `status` | 审批实例状态,见下方“status 枚举” | +| `reverted` | 单据是否已被撤销 | +| `start_time` | 审批创建时间 | +| `end_time` | 审批完成时间,未完成时通常为 `0` | +| `form` | 表单数据,JSON 字符串 | +| `current_nodes` | 当前审批节点列表 | +| `tasks` | 审批任务列表 | +| `operation_records` | 审批动态,例如通过、拒绝、转交、加签、回退、撤回、抄送 | +| `comments` | 评论列表 | + +## status 枚举 + +| 值 | 含义 | +|----|------| +| `PENDING` | 审批中 | +| `APPROVED` | 已通过 | +| `REJECTED` | 已拒绝 | +| `CANCELED` | 已撤回 | +| `DELETED` | 已删除 | + +## current_nodes 重点字段 + +`current_nodes` 常用于判断审批流当前卡在哪一层: + +| 字段 | 说明 | +|------|------------------------------------------| +| `current_nodes[].node_id` | 当前审批节点 ID | +| `current_nodes[].node_name` | 当前审批节点名称 | +| `current_nodes[].type` | 审批方式:`AND` 会签、`OR` 或签、`SEQUENTIAL` 依次审批等 | +| `current_nodes[].approvers[].task_id` | 当前审批人关联任务 ID | +| `current_nodes[].approvers[].user_id` | 当前审批人用户 ID | + +## tasks 重点字段 + +`tasks` 常用于把实例和具体审批任务关联起来: + +| 字段 | 说明 | +|------|------| +| `tasks[].id` | 审批任务 ID | +| `tasks[].node_id` | 任务所属节点 ID | +| `tasks[].node_name` | 任务所属节点名称 | +| `tasks[].user_id` | 审批人用户 ID | +| `tasks[].status` | 任务状态:`PENDING`、`APPROVED`、`REJECTED`、`TRANSFERRED`、`DONE` | +| `tasks[].start_time` | 任务开始时间 | +| `tasks[].end_time` | 任务完成时间 | + +## operation_records 重点字段 + +`operation_records` 常用于审计审批过程: + +| 字段 | 说明 | +|------|------| +| `operation_records[].type` | 事件类型,如 `PASS`、`REJECT`、`TRANSFER`、`ROLLBACK`、`CANCEL`、`CC` | +| `operation_records[].create_time` | 事件发生时间 | +| `operation_records[].user_id` | 触发该事件的用户 ID | +| `operation_records[].task_id` | 关联任务 ID | +| `operation_records[].node_id` | 关联节点 ID | +| `operation_records[].comment` | 理由 / 备注 | +| `operation_records[].cc_user_ids` | 被抄送人列表(抄送事件时) | + +## 使用建议 + +- **这是最适合做“详情确认”的只读命令**:当你已经拿到 `instance_code`,需要确认表单、当前节点、任务状态、审批动态时,优先使用它。 +- **在执行写操作前先看详情**:例如做 `tasks rollback` 前确认可退回节点,做 `instances cancel` 前确认实例状态,做 `tasks remind` 前确认当前任务是否仍待处理。 +- **`form` 是 JSON 字符串**:调用方通常还需要再解析一层,才能拿到表单字段值。 +- **`current_nodes` 和 `tasks` 可以联动看**:前者看“当前卡在哪个节点”,后者看“每个任务目前由谁处理、状态如何”。 +- **`operation_records` 适合做时间线回溯**:例如排查谁转交过、谁加签过、什么时候撤回或抄送过。 +- **优先显式传 `locale` 和 `user_id_type`**:这样 agent 更容易理解返回文本和 ID 语义,减少歧义。 + +## 输出与后续操作 + +读取详情后,常见下一步: + +```bash +# 同意审批任务 +lark-cli approval tasks approve --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>"}' --as user --yes + +# 撤回审批实例 +lark-cli approval instances cancel --data '{"instance_code":"<INSTANCE_CODE>"}' --as user --yes + +# 催办审批任务 +lark-cli approval tasks remind --data '{"instance_code":"<INSTANCE_CODE>","task_ids":["<TASK_ID>"]}' --as user --yes +``` diff --git a/skills/lark-approval/references/lark-approval-instances-initiated.md b/skills/lark-approval/references/lark-approval-instances-initiated.md new file mode 100644 index 000000000..a19eb0474 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-instances-initiated.md @@ -0,0 +1,122 @@ + +# approval instances initiated + +查询当前用户已发起的审批实例列表(用户级只读操作)。适合在需要查看“我发起了哪些审批”、筛选某类审批定义、获取 `instance_code` 供后续 `instances get` / `instances cancel` / `instances cc` 等命令使用时调用。 + +需要的 scopes: ["approval:instance:read"] + +## 命令 + +```bash +# 查询我发起的审批列表 +lark-cli approval instances initiated --params '{"page_size":20}' --as user + +# 只看某个审批定义下我发起的实例 +lark-cli approval instances initiated --params '{"definition_code":"<DEFINITION_CODE>","page_size":20}' --as user + +# 使用 page_token 翻页 +lark-cli approval instances initiated --params '{"page_size":20,"page_token":"example_page_token"}' --as user + +# 表格格式输出,便于快速浏览 +lark-cli approval instances initiated --params '{"page_size":20}' --format table --as user + +# 预览 API 调用,不执行 +lark-cli approval instances initiated --params '{"page_size":20}' --as user --dry-run +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--params '{...}'` | 否 | 查询参数,使用 JSON 传入;不传时使用默认分页与筛选 | +| `definition_code` | 否 | 审批定义 Code,用于只查看某个审批定义下我发起的实例 | +| `locale` | 否 | 返回语言:`zh-CN`、`en-US`、`ja-JP` | +| `page_size` | 否 | 分页大小 | +| `page_token` | 否 | 翻页标记;首次请求不填,后续使用上一次返回的 `page_token` | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id` | +| `--as user` | 否 | 建议显式指定用户身份;已发起审批列表查询通常应使用用户身份 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 输出重点字段 + +返回结果中常见字段: + +| 字段 | 说明 | +|------|------| +| `count` | 列表计数,只在第一页返回;大于等于 100 个实例时返回 `99` | +| `has_more` | 是否还有更多数据 | +| `page_token` | 下一页翻页 Token | +| `instances[].instance_code` | 审批实例 Code;后续查询详情或执行撤回 / 抄送时通常需要 | +| `instances[].definition_code` | 审批定义 Code | +| `instances[].definition_name` | 审批定义名称 | +| `instances[].definition_group_id` | 审批定义分组 ID | +| `instances[].definition_group_name` | 审批定义分组名称 | +| `instances[].initiator` | 发起人 ID | +| `instances[].initiator_name` | 发起人姓名 | +| `instances[].instance_status` | 审批实例状态,见下方“instance_status 枚举” | +| `instances[].instance_external_id` | 第三方审批实例 ID(仅第三方审批实例存在) | +| `instances[].link` | 三方审批跳转链接 | +| `instances[].summaries` | 摘要字段列表 | + +## instance_status 枚举 + +| 值 | 含义 | +|----|------| +| `0` | 无流程状态,不展示对应标签 | +| `1` | 流程实例流转中 | +| `2` | 已通过 | +| `3` | 已拒绝 | +| `4` | 已撤销 | +| `5` | 已终止 | + +## 常见使用场景 + +### 1) 找到我要操作的审批实例 + +```bash +lark-cli approval instances initiated --params '{"page_size":20}' --format table --as user +``` + +拿到 `instances[].instance_code` 后,可继续: + +```bash +# 查看审批实例详情 +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user + +# 撤回审批实例 +lark-cli approval instances cancel --data '{"instance_code":"<INSTANCE_CODE>"}' --as user --yes +``` + +### 2) 只看某类审批 + +```bash +lark-cli approval instances initiated \ + --params '{"definition_code":"<DEFINITION_CODE>","page_size":20}' \ + --as user +``` + + +## 使用建议 + +- **这是定位“我发起的审批实例”的首选命令**:如果你的目标是撤回、抄送、查看某个已发起审批,优先从这里拿 `instance_code`。 +- **优先用 `definition_code` 缩小范围**:当你已知审批定义时,先筛掉无关实例,可显著提升可读性。 +- **结果很多时优先 `--format table`**:适合人工快速浏览。 +- **`count` 只在第一页返回**:做分页处理时不要假设后续页还会带总数。 +- **`instance_status` 可直接判断下一步**:例如状态为 `1` 时通常可继续查看详情或考虑撤回,状态为 `4` 表示已经撤销,无需重复撤回。 +- **摘要字段 `summaries` 很适合做列表预览**:当审批标题不够明确时,可结合摘要值帮助识别目标实例。 + +## 输出与后续操作 + +拿到列表后,常见下一步: + +```bash +# 查看单个审批实例详情 +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user + +# 撤回审批实例 +lark-cli approval instances cancel --data '{"instance_code":"<INSTANCE_CODE>"}' --as user --yes + +# 给审批实例追加抄送人 +lark-cli approval instances cc --data '{"instance_code":"<INSTANCE_CODE>","cc_user_ids":["<USER_ID>"]}' --params '{"user_id_type":"open_id"}' --as user --yes +``` diff --git a/skills/lark-approval/references/lark-approval-tasks-add-sign.md b/skills/lark-approval/references/lark-approval-tasks-add-sign.md new file mode 100644 index 000000000..c0b0759b8 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-add-sign.md @@ -0,0 +1,120 @@ + +# approval tasks add_sign + +给一个审批任务加签(用户级写操作)。通常先通过 `tasks query` 拿到 `task_id` 和 `instance_code`,确认目标任务后,再提供被加签人的用户 ID、加签方式等参数执行加签。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要对该审批任务加签且目标任务、加签对象、加签方式都无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:task:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval tasks add_sign \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","add_sign_type":1,"add_sign_user_ids":["ou_xxx"],"approval_method":1,"comment":"前加签给财务复核"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --dry-run + +# 前加签(需要 approval_method) +lark-cli approval tasks add_sign \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","add_sign_type":1,"add_sign_user_ids":["ou_xxx"],"approval_method":1,"comment":"请先补充审核"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes + +# 后加签(需要 approval_method) +lark-cli approval tasks add_sign \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","add_sign_type":2,"add_sign_user_ids":["ou_xxx","ou_yyy"],"approval_method":2,"comment":"当前审批完成后请两位继续审核"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes + +# 并加签(常见场景可不传 approval_method) +lark-cli approval tasks add_sign \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","add_sign_type":3,"add_sign_user_ids":["123456789"],"comment":"并加签给项目 owner"}' \ + --params '{"user_id_type":"user_id"}' \ + --as user \ + --yes + +# 通过文件传入请求体,适合较长 comment 或较多加签人 +lark-cli approval tasks add_sign \ + --data @./add-sign-body.json \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `tasks query` 或 `instances initiated` / `instances get` 获取 | +| `task_id` | 是 | 审批任务 ID;通常先通过 `tasks query` 获取 | +| `add_sign_type` | 是 | 加签类型:`1` 前加签、`2` 后加签、`3` 并加签 | +| `add_sign_user_ids` | 是 | 被加签人 ID 数组;需要和 `user_id_type` 保持一致 | +| `approval_method` | 否 | 审批方式:`1` 或签、`2` 会签、`3` 依次审批;**仅在前加签、后加签时需要填写** | +| `comment` | 否 | 审批意见或加签说明,例如 `前加签给财务复核`、`请项目 owner 一并确认` | +| `--params '{"user_id_type":"..."}'` | 否 | 查询参数 JSON;用于声明 `add_sign_user_ids` 内用户 ID 的类型 | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id`;未显式指定时要特别确认被加签人的 ID 类型 | +| `--as user` | 否 | 建议显式指定用户身份;审批加签通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 枚举说明 + +### add_sign_type + +| 值 | 含义 | +|----|------| +| `1` | 前加签 | +| `2` | 后加签 | +| `3` | 并加签 | + +### approval_method + +| 值 | 含义 | 适用场景 | +|----|------|----------| +| `1` | 或签 | 前加签 / 后加签 | +| `2` | 会签 | 前加签 / 后加签 | +| `3` | 依次审批 | 前加签 / 后加签 | + +## 典型前置步骤 + +先查到待办任务: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的字段: + +| 字段 | 说明 | +|------|------| +| `tasks[].instance_code` | 审批实例 Code;执行 approve / reject / transfer / rollback / add_sign 等操作时通常都需要 | +| `tasks[].task_id` | 审批任务 ID;与 `instance_code` 配对使用 | +| `tasks[].support_api_operate` | 是否支持通过 API 处理该任务;加签前建议先检查 | + +如果你手里只有姓名或邮箱,建议先通过联系人能力解析出正确的用户 ID,再执行加签。 + +如需先确认表单、节点、审批流进度,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **`instance_code` 和 `task_id` 要成对使用**:仅有实例 ID 或仅有任务 ID 都不足以准确执行加签操作。 +- **`add_sign_user_ids` 与 `user_id_type` 必须匹配**:例如传 open_id 就把 `user_id_type` 设为 `open_id`;不要混用。 +- **优先显式传 `user_id_type`**:这样 agent 更容易判断参数含义,也能减少 ID 类型不匹配带来的失败。 +- **`add_sign_type` 要和业务意图一致**:前加签是在当前审批前插入审批人,后加签是在当前审批后追加审批人,并加签则是增加并行审批人。 +- **前加签 / 后加签要补 `approval_method`**:不要遗漏,否则请求可能无法准确表达审批方式。 +- **优先从 `tasks query` 的待办列表拿任务参数**:尤其是 `topic=1` 的待办审批,最适合作为 add_sign 的输入来源。 +- **先检查是否支持 API 操作**:如果 `tasks[].support_api_operate` 为 `false`,说明该任务可能不支持通过 API 执行处理动作,加签前应谨慎验证。 +- **`comment` 建议写明加签原因**:例如 `增加财务复核`、`增加项目 owner 并行确认`,方便相关人员理解上下文。 +- **先 `--dry-run` 再执行**:尤其在多人加签、跨部门加签或加签对象来源不明确时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-tasks-approve.md b/skills/lark-approval/references/lark-approval-tasks-approve.md new file mode 100644 index 000000000..5c0eb33be --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-approve.md @@ -0,0 +1,81 @@ + +# approval tasks approve + +同意一个审批任务(用户级写操作)。通常先通过 `tasks query` 拿到 `task_id` 和 `instance_code`,必要时再用 `instances get` 查看详情,然后再执行同意。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确同意审批且目标任务无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:task:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval tasks approve \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","comment":"同意"}' \ + --as user \ + --dry-run + +# 同意审批任务,并附带审批意见 +lark-cli approval tasks approve \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","comment":"同意"}' \ + --as user \ + --yes + +# 需要回填表单时,传入 form(按当前命令定义,form 为字符串化 JSON) +lark-cli approval tasks approve \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","comment":"同意并补充信息","form":"[{\"id\":\"user_name\",\"type\":\"input\",\"value\":\"Alice\"}]"}' \ + --as user \ + --yes + +# 通过文件传入请求体,适合较长 comment / form +lark-cli approval tasks approve \ + --data @./approve-body.json \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `tasks query` 或 `instances initiated` / `instances get` 获取 | +| `task_id` | 是 | 审批任务 ID;通常先通过 `tasks query` 获取 | +| `comment` | 否 | 审批意见,例如 `同意`、`已确认` | +| `form` | 否 | 表单数据;按当前命令定义,字段类型为 `string`,通常传字符串化 JSON;仅在审批动作需要同时回填表单时使用 | +| `--as user` | 否 | 建议显式指定用户身份;审批同意通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +先查到待办任务: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的两个字段: + +| 字段 | 说明 | +|------|------| +| `tasks[].instance_code` | 审批实例 Code;执行 approve / reject / rollback 等操作时通常都需要 | +| `tasks[].task_id` | 审批任务 ID;与 `instance_code` 配对使用 | + +如需先确认表单、节点、审批流进度,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **`instance_code` 和 `task_id` 要成对使用**:仅有实例 ID 或仅有任务 ID 都不足以准确执行同意操作。 +- **优先从 `tasks query` 的待办列表拿参数**:尤其是 `topic=1` 的待办审批,最适合作为 approve 的输入来源。 +- **先检查是否支持 API 操作**:如果上一步 `tasks query` 返回的 `tasks[].support_api_operate` 为 `false`,说明该任务可能不支持通过 API 同意/拒绝。 +- **`comment` 建议简洁明确**:例如 `同意`、`同意,信息已核对`。没有审批意见要求时可省略。 +- **`form` 只在确有需要时传**:大多数简单同意场景只传 `instance_code`、`task_id`、可选 `comment` 即可。 +- **先 `--dry-run` 再执行**:尤其在批量处理、表单回填或任务来源不明确时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-tasks-query.md b/skills/lark-approval/references/lark-approval-tasks-query.md new file mode 100644 index 000000000..d5fb59a38 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-query.md @@ -0,0 +1,76 @@ + +# approval tasks query + +查询当前用户的审批任务列表,可用于查看待办、已办、知会等分组。只读操作,不会修改审批状态。 + +需要的 scopes: ["approval:task:read"] + +## 命令 + +```bash +# 查询待办审批 +lark-cli approval tasks query --params '{"topic":"1"}' --as user + +# 查询已办审批 +lark-cli approval tasks query --params '{"topic":"2"}' --as user + +# 使用 page_token 翻页 +lark-cli approval tasks query --params '{"topic":"1","page_token":"example_page_token"}' --as user + +# 表格格式输出,便于快速浏览 +lark-cli approval tasks query --params '{"topic":"1"}' --format table --as user +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--params '{"topic":"..."}'` | 是 | 查询参数,使用 JSON 传入 | +| `topic` | 是 | 任务分组主题,见下方“topic 枚举” | +| `definition_code` | 否 | 审批定义 Code,用于仅查询某个审批定义下的任务 | +| `locale` | 否 | 返回语言:`zh-CN`、`en-US`、`ja-JP` | +| `page_size` | 否 | 分页大小 | +| `page_token` | 否 | 翻页标记;首次请求不填,后续使用上一次返回的 `page_token` | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id` | +| `--as user` | 否 | 建议显式指定用户身份;审批任务查询通常应使用用户身份 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## topic 枚举 + +| 值 | 含义 | +|----|------| +| `1` | 待办审批 | +| `2` | 已办审批 | +| `17` | 未读知会 | +| `18` | 已读知会 | + +## 输出重点字段 + +返回结果中常见字段: + +| 字段 | 说明 | +|------|------| +| `count` | 列表计数,只在第一页返回;当任务数大于等于 100 时返回 `99` | +| `has_more` | 是否还有更多数据 | +| `page_token` | 下一页翻页 Token | +| `tasks[].task_id` | 任务 ID,全局唯一 | +| `tasks[].instance_code` | 审批实例 Code;后续执行 approve / reject / rollback 等操作时通常需要与 `task_id` 成对使用 | +| `tasks[].title` | 任务标题 | +| `tasks[].status` | 任务状态:`1` 待办、`2` 已办、`17` 未读、`18` 已读、`33` 处理中、`34` 撤回 | +| `tasks[].topic` | 任务所属分组主题 | +| `tasks[].instance_status` | 审批实例状态:`0` 无状态、`1` 流转中、`2` 已通过、`3` 已拒绝、`4` 已撤销、`5` 已终止 | +| `tasks[].definition_code` | 审批定义 Code | +| `tasks[].definition_name` | 审批定义名称 | +| `tasks[].initiator` | 发起人 ID | +| `tasks[].initiator_name` | 发起人姓名 | +| `tasks[].summaries` | 表单摘要字段列表 | +| `tasks[].support_api_operate` | 是否支持通过 API 同意或拒绝该任务 | +| `tasks[].user_id` | 任务所属用户 ID | + +## 使用建议 + +- 常见处理链:先用 `tasks query` 拿到 `task_id` 和 `instance_code`,若用户需要查看详情、当前节点、表单内容、流程进度等内容,则调用 `instances get` 查看详情,最后执行 `tasks approve` / `tasks reject` / `tasks transfer` / `tasks add_sign` / `tasks rollback`。 +- 如果你只想看“已发起的审批实例”,使用 `instances initiated`;`tasks query` 更适合围绕“任务分组”来拉取列表。 +- 需要继续翻页时,直接把上一次返回的 `page_token` 放回 `--params`。 +- 当结果量较大时,优先使用 `--format table` 提升可读性。 diff --git a/skills/lark-approval/references/lark-approval-tasks-reject.md b/skills/lark-approval/references/lark-approval-tasks-reject.md new file mode 100644 index 000000000..b6d8a46e0 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-reject.md @@ -0,0 +1,73 @@ + +# approval tasks reject + +拒绝一个审批任务(用户级写操作)。通常先通过 `tasks query` 拿到 `task_id` 和 `instance_code`,必要时再用 `instances get` 查看详情,然后再执行拒绝。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要拒绝该审批且目标任务无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:task:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval tasks reject \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","comment":"拒绝"}' \ + --as user \ + --dry-run + +# 拒绝审批任务,并附带审批意见 +lark-cli approval tasks reject \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","comment":"拒绝,信息不完整"}' \ + --as user \ + --yes + +# 通过文件传入请求体,适合较长 comment +lark-cli approval tasks reject \ + --data @./reject-body.json \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `tasks query` 或 `instances initiated` / `instances get` 获取 | +| `task_id` | 是 | 审批任务 ID;通常先通过 `tasks query` 获取 | +| `comment` | 否 | 审批意见,例如 `拒绝`、`拒绝,信息不完整` | +| `--as user` | 否 | 建议显式指定用户身份;审批拒绝通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +先查到待办任务: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的两个字段: + +| 字段 | 说明 | +|------|------| +| `tasks[].instance_code` | 审批实例 Code;执行 approve / reject / rollback 等操作时通常都需要 | +| `tasks[].task_id` | 审批任务 ID;与 `instance_code` 配对使用 | + +如需先确认表单、节点、审批流进度,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **`instance_code` 和 `task_id` 要成对使用**:仅有实例 ID 或仅有任务 ID 都不足以准确执行拒绝操作。 +- **优先从 `tasks query` 的待办列表拿参数**:尤其是 `topic=1` 的待办审批,最适合作为 reject 的输入来源。 +- **先检查是否支持 API 操作**:如果上一步 `tasks query` 返回的 `tasks[].support_api_operate` 为 `false`,说明该任务可能不支持通过 API 同意/拒绝。 +- **`comment` 建议写清拒绝原因**:例如 `拒绝,缺少合同附件`、`拒绝,预算字段填写不完整`。这有助于发起人理解原因并补充材料。 +- **先 `--dry-run` 再执行**:尤其在批量处理或任务来源不明确时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-tasks-remind.md b/skills/lark-approval/references/lark-approval-tasks-remind.md new file mode 100644 index 000000000..c46708c89 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-remind.md @@ -0,0 +1,82 @@ + +# approval tasks remind + +对审批实例中的指定任务发起催办(用户级写操作)。通常先通过 `tasks query` 找到待办任务,拿到 `instance_code` 和要催办的 `task_ids`,必要时再用 `instances get` 查看详情,然后执行催办。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要催办该审批且目标实例、目标任务都无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:instance:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval tasks remind \ + --data '{"instance_code":"<INSTANCE_CODE>","task_ids":["<TASK_ID>"],"comment":"请尽快处理"}' \ + --as user \ + --dry-run + +# 催办单个审批任务 +lark-cli approval tasks remind \ + --data '{"instance_code":"<INSTANCE_CODE>","task_ids":["<TASK_ID>"],"comment":"请尽快审批该单据"}' \ + --as user \ + --yes + +# 同一实例下催办多个任务 +lark-cli approval tasks remind \ + --data '{"instance_code":"<INSTANCE_CODE>","task_ids":["<TASK_ID_1>","<TASK_ID_2>"],"comment":"请相关审批人尽快处理"}' \ + --as user \ + --yes + +# 通过文件传入请求体,适合较长 comment 或多个 task_ids +lark-cli approval tasks remind \ + --data @./remind-body.json \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `tasks query` 或 `instances get` 获取 | +| `task_ids` | 是 | 被催办的任务 ID 数组;应与 `instance_code` 属于同一审批实例 | +| `comment` | 否 | 催办说明,例如 `请尽快处理`、`该单据较急,请优先审批` | +| `--as user` | 否 | 建议显式指定用户身份;审批催办通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +先查到待办任务: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的字段: + +| 字段 | 说明 | +|------|------| +| `tasks[].instance_code` | 审批实例 Code;催办时必须提供 | +| `tasks[].task_id` | 审批任务 ID;放入 `task_ids` 数组中 | +| `tasks[].title` | 任务标题,可用于确认催办对象是否正确 | +| `tasks[].status` | 任务状态;一般优先催办仍处于待处理状态的任务 | + +如需进一步确认当前审批流、节点和人员信息,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **`instance_code` 和 `task_ids` 要对应同一个审批实例**:不要把不同实例下的任务 ID 混在同一次催办请求中。 +- **`task_ids` 是数组**:即使只催办一个任务,也要按数组形式传入。 +- **优先从 `tasks query` 的待办列表拿参数**:尤其是 `topic=1` 的待办审批,最适合作为 remind 的输入来源。 +- **催办前先确认任务仍需处理**:已经审批完成、已撤回或已终止的任务一般不适合继续催办。 +- **`comment` 建议简洁且明确**:例如 `该单据较急,请优先审批`、`请今天内处理`。避免过长或模糊描述。 +- **先 `--dry-run` 再执行**:尤其在一次催办多个任务、任务来源不明确或需让用户复核催办对象时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-tasks-rollback.md b/skills/lark-approval/references/lark-approval-tasks-rollback.md new file mode 100644 index 000000000..b9f354049 --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-rollback.md @@ -0,0 +1,83 @@ + +# approval tasks rollback + +将一个审批任务退回到指定节点(用户级写操作)。通常先通过 `tasks query` 拿到 `task_id` 和 `instance_code`,再结合实例详情确认可退回的目标节点 `node_ids`,最后执行退回。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要退回该审批且目标任务、退回节点都无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:task:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval tasks rollback \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","node_ids":["<NODE_ID>"],"comment":"退回补充材料"}' \ + --as user \ + --dry-run + +# 退回到单个节点 +lark-cli approval tasks rollback \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","node_ids":["<NODE_ID>"],"comment":"请补充附件后重新提交"}' \ + --as user \ + --yes + +# 传多个候选节点 ID(以实际审批定义支持情况为准) +lark-cli approval tasks rollback \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","node_ids":["<NODE_ID_1>","<NODE_ID_2>"],"comment":"退回上一处理节点"}' \ + --as user \ + --yes + +# 通过文件传入请求体,适合较长 comment 或较多 node_ids +lark-cli approval tasks rollback \ + --data @./rollback-body.json \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `tasks query` 或 `instances initiated` / `instances get` 获取 | +| `task_id` | 是 | 审批任务 ID;通常先通过 `tasks query` 获取 | +| `node_ids` | 是 | 退回目标节点 ID 数组;执行前应先确认这些节点确实可作为退回目标 | +| `comment` | 否 | 审批意见或退回说明,例如 `请补充附件后重新提交`、`预算说明不完整,请补充` | +| `--as user` | 否 | 建议显式指定用户身份;审批退回通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +先查到待办任务: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的字段: + +| 字段 | 说明 | +|------|------| +| `tasks[].instance_code` | 审批实例 Code;执行 approve / reject / transfer / rollback 等操作时通常都需要 | +| `tasks[].task_id` | 审批任务 ID;与 `instance_code` 配对使用 | +| `tasks[].support_api_operate` | 是否支持通过 API 处理该任务;退回前建议先检查 | + +如需确认流程节点、当前进度和可退回位置,可先查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **`instance_code` 和 `task_id` 要成对使用**:仅有实例 ID 或仅有任务 ID 都不足以准确执行退回操作。 +- **`node_ids` 是必填项**:退回并不是“自动退回上一步”,而是要明确给出目标节点 ID 数组。 +- **先确认节点是否可退回**:不同审批定义支持的退回目标可能不同;在不确定时,先通过 `instances get` 或业务侧流程信息核实。 +- **优先从 `tasks query` 的待办列表拿任务参数**:尤其是 `topic=1` 的待办审批,最适合作为 rollback 的输入来源。 +- **先检查是否支持 API 操作**:如果 `tasks[].support_api_operate` 为 `false`,说明该任务可能不支持通过 API 执行处理动作,退回前应谨慎验证。 +- **`comment` 建议写清退回原因**:例如 `附件缺失,请补齐后重新提交`、`费用说明不完整,请补充明细`,方便发起人或上一步处理人理解原因。 +- **先 `--dry-run` 再执行**:尤其在节点来源不明确、审批链路复杂或批量处理时,先预览更安全。 diff --git a/skills/lark-approval/references/lark-approval-tasks-transfer.md b/skills/lark-approval/references/lark-approval-tasks-transfer.md new file mode 100644 index 000000000..edc09fdba --- /dev/null +++ b/skills/lark-approval/references/lark-approval-tasks-transfer.md @@ -0,0 +1,91 @@ + +# approval tasks transfer + +转交一个审批任务给其他用户处理(用户级写操作)。通常先通过 `tasks query` 拿到 `task_id` 和 `instance_code`,确认目标任务后,再提供被转交人的用户 ID 执行转交。 + +> [!CAUTION] +> 这是 **high-risk-write** 写操作。建议先用 `--dry-run` 预览;真正执行时,如果用户已明确要转交该审批且目标任务、转交对象都无误,再带 `--yes` 运行。不要在未获用户明确同意时静默追加 `--yes`。 + +需要的 scopes: ["approval:task:write"] + +## 命令 + +```bash +# 先预览请求,不实际执行 +lark-cli approval tasks transfer \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","transfer_user_id":"ou_xxx","comment":"请你继续处理"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --dry-run + +# 按 open_id 转交审批任务 +lark-cli approval tasks transfer \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","transfer_user_id":"ou_xxx","comment":"转交给你处理"}' \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes + +# 按 user_id 转交审批任务 +lark-cli approval tasks transfer \ + --data '{"instance_code":"<INSTANCE_CODE>","task_id":"<TASK_ID>","transfer_user_id":"123456789","comment":"请补充审核"}' \ + --params '{"user_id_type":"user_id"}' \ + --as user \ + --yes + +# 通过文件传入请求体,适合较长 comment +lark-cli approval tasks transfer \ + --data @./transfer-body.json \ + --params '{"user_id_type":"open_id"}' \ + --as user \ + --yes +``` + +## 参数 + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--data '{...}'` | 是 | 请求体 JSON,使用 JSON 传入 | +| `instance_code` | 是 | 审批实例 Code;通常先通过 `tasks query` 或 `instances initiated` / `instances get` 获取 | +| `task_id` | 是 | 审批任务 ID;通常先通过 `tasks query` 获取 | +| `transfer_user_id` | 是 | 被转交人的用户 ID;需要和 `user_id_type` 保持一致 | +| `comment` | 否 | 审批意见或转交说明,例如 `转交给你处理`、`请继续审核该单据` | +| `--params '{"user_id_type":"..."}'` | 否 | 查询参数 JSON;用于声明 `transfer_user_id` 的 ID 类型 | +| `user_id_type` | 否 | 用户 ID 类型:`user_id`、`union_id`、`open_id`;未显式指定时要特别确认 `transfer_user_id` 的真实类型 | +| `--as user` | 否 | 建议显式指定用户身份;审批转交通常必须以用户身份执行 | +| `--yes` | 否 | 确认执行高风险写操作;未带时可能返回 `confirmation_required` / exit 10 | +| `--format` | 否 | 输出格式:`json`(默认)、`ndjson`、`table`、`csv` | +| `--dry-run` | 否 | 预览 API 调用,不执行 | + +## 典型前置步骤 + +先查到待办任务: + +```bash +lark-cli approval tasks query --params '{"topic":"1"}' --as user +``` + +常用到的字段: + +| 字段 | 说明 | +|------|------| +| `tasks[].instance_code` | 审批实例 Code;执行 approve / reject / transfer / rollback 等操作时通常都需要 | +| `tasks[].task_id` | 审批任务 ID;与 `instance_code` 配对使用 | +| `tasks[].support_api_operate` | 是否支持通过 API 处理该任务;转交前建议先检查 | + +如果你手里只有姓名或邮箱,建议先通过联系人能力解析出正确的用户 ID,再执行转交。 + +如需先确认表单、节点、审批流进度,可继续查看实例详情: + +```bash +lark-cli approval instances get --params '{"instance_code":"<INSTANCE_CODE>"}' --as user +``` + +## 使用建议 + +- **`instance_code` 和 `task_id` 要成对使用**:仅有实例 ID 或仅有任务 ID 都不足以准确执行转交操作。 +- **`transfer_user_id` 与 `user_id_type` 必须匹配**:例如传 open_id 就把 `user_id_type` 设为 `open_id`;不要混用。 +- **优先显式传 `user_id_type`**:这样 agent 更容易判断参数含义,也能减少 ID 类型不匹配带来的失败。 +- **优先从 `tasks query` 的待办列表拿任务参数**:尤其是 `topic=1` 的待办审批,最适合作为 transfer 的输入来源。 +- **先检查是否支持 API 操作**:如果 `tasks[].support_api_operate` 为 `false`,说明该任务可能不支持通过 API 执行同意/拒绝等处理动作,转交前也应谨慎验证。 +- **`comment` 建议写明转交原因**:例如 `你更熟悉该项目,请继续处理`、`转交给预算 owner 审核`,方便接收人理解上下文。 +- **先 `--dry-run` 再执行**:尤其在跨部门转交、批量处理或转交对象来源不明确时,先预览更安全。 diff --git a/skills/lark-apps/SKILL.md b/skills/lark-apps/SKILL.md index b8bc7599e..ff2761fef 100644 --- a/skills/lark-apps/SKILL.md +++ b/skills/lark-apps/SKILL.md @@ -12,6 +12,16 @@ metadata: 妙搭应用属于用户资产。默认用 `--as user`;认证、scope、exit-10、高风险确认、`_notice` 等通用处理只读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),不要在本 skill 里复制。妙搭应用有三条开发路径:**本地全栈**(拉源码本地写)/ **HTML 托管**(发布静态产物)/ **云端会话**(妙搭 AI 生成)。 +## 身份与一次性授权 + +妙搭应用是用户的个人资产,统一 `--as user`(见开头)。**首次操作前先一次性把本域 scope 全拿到**,避免每条命令首次跑都触发新一轮授权,或未授权直接打到 openapi 导致服务端报错: + +```bash +lark-cli auth login --domain apps +``` + +因缺权限失败(`error.subtype == "missing_scope"`)时的通用处理见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),同样按 `--domain apps` 授权。 + ## 意图路由 按具体操作查命令(开发路径先用下方「选择开发路径」判定表定好再进来取命令): diff --git a/skills/lark-apps/references/lark-apps-db-execute.md b/skills/lark-apps/references/lark-apps-db-execute.md index c0baf815f..c2af72f5d 100644 --- a/skills/lark-apps/references/lark-apps-db-execute.md +++ b/skills/lark-apps/references/lark-apps-db-execute.md @@ -11,7 +11,7 @@ - 必填:`--app-id`,以及 `--sql` / `--file` 二选一(互斥)。 - `--sql`:内联 SQL 文本;传 `-` 时从 stdin 读。绝对路径文件经 stdin 传入:`--sql - < <absolute-path>`(shell 解析路径,CLI 仅接收内容)。 - `--file`:`.sql` 文件路径,需为工作目录内的相对路径(如 `--file ./migration.sql`);绝对路径、或经 `..`/符号链接越出工作目录的路径会被拒绝。文件不在工作目录内时,改用 `--sql - < <文件路径>` 经 stdin 传入。 -- `--environment` 枚举:`dev` / `online`,**默认 `dev`**;操作线上库、或**未开启多环境的应用(其数据库在 `online`,没有 dev 分支)**时显式 `--environment online`。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。 +- `--environment` 枚举:`dev` / `online`,**不传则由服务端按应用是否开启多环境自动选择(多环境→`dev`,未开启多环境→`online`)**;要固定环境就显式传 `--environment dev|online`。**未开启多环境的应用显式传 `--environment dev` 会报错(无 dev 分支)——这类应用不传 `--environment`(走 `online`)或显式 `--environment online`**。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。 - risk 是 `high-risk-write`(SQL 可含 DML/DDL):任何执行都需 `--yes`,否则返回 `confirmation_required` / exit 10。`--dry-run` 预览不需要 `--yes`。 - **不会自动为你包事务,事务边界需自己在 SQL 里控制**:多语句默认逐条独立提交,中间某条失败时前序语句已生效、不会回滚;若需要「要么全部成功、要么全部回滚」的原子性,请在 SQL 内显式写 `BEGIN … COMMIT`(详见下「Agent 规则」)。 diff --git a/skills/lark-apps/references/lark-apps-db.md b/skills/lark-apps/references/lark-apps-db.md index e903b2f03..f4a97dc05 100644 --- a/skills/lark-apps/references/lark-apps-db.md +++ b/skills/lark-apps/references/lark-apps-db.md @@ -28,7 +28,7 @@ ## 约定(先读) -- **环境 `--environment dev|online`(所有 db 命令统一默认 `dev`)**:看表、看结构、数据导入导出、变更追溯、审计、配额都按环境区分,写操作建议先在 `dev` 验。**注意:只有开启了多环境(`+db-env-create`)的应用才有 `dev` 分支;未开启多环境的应用其数据库在 `online`——对这类应用必须显式 `--environment online`,否则默认的 `dev` 分支不存在、会报错**。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。`+db-env-diff`/`+db-env-migrate` 是「dev→online 发布」语义、`+db-recovery-*` 作用于当前库,二者**没有** `--environment`。 +- **环境 `--environment dev|online`(可省略)**:看表、看结构、数据导入导出、变更追溯、审计、配额都按环境区分。省略 `--environment` 时 CLI 不带该参数、由服务端按应用形态自动选分支——多环境应用走 `dev`、未开多环境的走 `online`;要固定环境就显式传。唯一会报错的组合:对未开多环境的应用显式传 `--environment dev`(无 `dev` 分支)。写操作建议先在 `dev` 验(仅多环境应用有 `dev`)。旧名 `--env` 已**移除**:传入会报 validation 错(提示改用 `--environment`),一律用 `--environment`。`+db-env-diff`/`+db-env-migrate` 是「dev→online 发布」语义,**没有** `--environment`。 - **本地文件 / `--output` 用工作目录内相对路径**:导入 `--file ./orders.csv`、导出 `--output ./out.csv`;绝对路径、或经 `..`/符号链接越出工作目录的 `--output` 会被拒(validation / exit 2)。路径在别处先 `cd` 过去或改成相对路径。 - **高危操作必须带 `--yes`**:`+db-env-create`、`+db-data-import`、`+db-env-migrate`、`+db-recovery-apply` 缺省会被确认关卡拦下;动手前先用对应的预览命令或 `--dry-run` 看清影响。 - **时间参数按口语自然传**(`--since`/`--until`/`--target`),格式见末尾。 @@ -154,7 +154,7 @@ lark-cli apps +db-quota-get --app-id app_xxx --environment dev ## Agent 规则 -- 用户说「本地 / 开发库 / 调试库」优先 `--environment dev`,线上排查用 `--environment online`;数据面写操作(导入 / 审计开关)默认先在 `dev` 验再动 `online`。 +- 用户说「本地 / 开发库 / 调试库」优先 `--environment dev`,线上排查用 `--environment online`;数据面写操作(导入 / 审计开关)建议先在 `dev` 验再动 `online`。**注意省略 `--environment` 时写操作会落到服务端选中的分支——单环境应用即 `online`(生产)**:不确定应用是否多环境时,写操作显式传 `--environment`;显式 `dev` 在单环境应用上会安全报错(无 dev 分支),正好当「是否多环境」的探针用。 - 看表用 `+db-table-list`,看结构用 `+db-table-get`(要建表语句加 `--format pretty`);`+db-env-create` 仅用于存量单库拆多环境,新建的 full_stack 应用一般不需要。 - 四个高危命令(`+db-env-create`、`+db-data-import`、`+db-env-migrate`、`+db-recovery-apply`)动手前先看清影响再带 `--yes`:发布 / 恢复先跑对应预览 `+db-env-diff` / `+db-recovery-diff`,导入无预览命令、可先 `--dry-run` 看请求或先在 `--environment dev` 验;不要静默追加 `--yes`,遇 confirmation_required(exit 10)按 lark-shared 协议向用户确认不可逆风险后再补 `--yes` 重试。 - 导入 / 导出的本地路径用工作目录内相对路径;超大表导出会被行数 / 体积上限拒,改用 `+db-execute` 分批。 diff --git a/skills/lark-calendar/SKILL.md b/skills/lark-calendar/SKILL.md index c5abe0111..197436018 100644 --- a/skills/lark-calendar/SKILL.md +++ b/skills/lark-calendar/SKILL.md @@ -12,7 +12,7 @@ metadata: 开始前先读 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)(认证、权限处理)。 -**CRITICAL — 凡涉及预约日程/会议或查询/搜索会议室,第一步 MUST 读 [`references/lark-calendar-schedule-meeting.md`](references/lark-calendar-schedule-meeting.md)。禁止跳过此步直接调用 API 或 Shortcut!** +**CRITICAL — 凡涉及预约日程/会议室、调整时间或查询/搜索会议室,第一步 MUST 读 [`references/lark-calendar-schedule-meeting.md`](references/lark-calendar-schedule-meeting.md)。仅编辑字段(改标题/描述)或增删参会人(不涉及时间和会议室)时可跳过,直接读 [`references/lark-calendar-update.md`](references/lark-calendar-update.md)。** ## 身份 @@ -30,28 +30,84 @@ lark-cli calendar +agenda --as user | Shortcut | 说明 | |----------|------| -| [`+agenda`](references/lark-calendar-agenda.md) | 查看日程安排(默认今天) | -| [`+search-event`](references/lark-calendar-search-event.md) | 按关键词、时间范围和参会人搜索日程, 仅返回 日程ID/主题/时间等信息,详情需走 `events get` | +| `+agenda` | 查看日程安排(默认今天) | | [`+meeting`](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meeting_id、meeting_note),日程开过视频会议才会有meeting_id | | [`+create`](references/lark-calendar-create.md) | 创建日程并邀请参会人(ISO 8601 时间) | | [`+update`](references/lark-calendar-update.md) | 更新既有日程字段,或独立增量添加/移除参会人和会议室 | -| [`+freebusy`](references/lark-calendar-freebusy.md) | 查询用户主日历的忙闲信息和 RSVP 状态 | +| `+freebusy` | 查询用户主日历的忙闲信息和 RSVP 状态(纯查询场景;预约场景走 `+suggestion`) | | [`+room-find`](references/lark-calendar-room-find.md) | 针对一个或多个**明确的**时间块查找可用会议室(无明确时间时禁止直接调用,需先走 +suggestion) | | [`+rsvp`](references/lark-calendar-rsvp.md) | 回复日程(接受/拒绝/待定) | | [`+suggestion`](references/lark-calendar-suggestion.md) | 根据非明确时间或一段时间范围,推荐多个可用时间块方案 | +### `+get` — 单日程详情 + +通过 `calendar_id` + `event_id` 获取**单个日程**详情。 + +```bash +# calendar_id不传,默认primary +lark-cli calendar +get --calendar-id <calendar_id> --event-id <event_id> +``` + +### `+search-event` — 按关键词、时间范围和参会人搜索日程 + +仅返回基础字段(`event_id`/`summary`/`start`/`end` 等),需要详情请走 `+get`。 + +```bash +# query 按关键词 可选 +# start/end 按时间范围(ISO 8601 或 YYYY-MM-DD)可选 +# attendee-ids 按参会人(自动识别 ou_ 用户 / oc_ 群聊 / omm_ 会议室前缀)可选 +# page-token 分页游标,用于继续翻页 可选 +# page-size 每页数量,默认 30 可选 +lark-cli calendar +search-event --query "周会" --start 2026-04-20 --end 2026-04-27 --attendee-ids "ou_user1,oc_chat1,omm_room1" --page-token <page_token> --page-size 30 +``` + +### `+agenda` — 查看近期日程安排 + +默认查询当天。结果应整理为按日期分组、按开始时间升序的易读时间线。 + +```bash +# start/end 时间范围(ISO 8601 / YYYY-MM-DD / Unix 秒),均可选;默认当天 +# calendar-id 日历 ID(默认primary)可选 +lark-cli calendar +agenda --start 2026-03-10 --end 2026-03-17 --calendar-id <calendar_id> +``` + +注意: +- 已取消的日程自动过滤;无日程时直接告知"日程清空"。 +- 时间范围超过 40 天会自动拆分查询并合并结果。 + +### `+freebusy` — 查询主日历忙闲时段和 RSVP 状态 + +仅返回忙碌时段起止时间,不含日程标题等隐私信息;其他订阅日历不在范围内。 + +```bash +# start/end 时间范围(ISO 8601 / YYYY-MM-DD / Unix 秒),均可选;默认当天 +# user-id 目标用户 open_id(ou_ 前缀)可选;默认当前登录用户,bot 身份必须显式指定 +lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx +``` + +用法提示: +- **仅判断是否有空** → `+freebusy`;**需要日程详情** → `+agenda`。 +- 检查多人可用性:分别调用并对比,找共同空闲。 +- 预约/改约场景下,调用规则(参与人过多、含群组、来自 `+suggestion` 等)详见 [schedule-clear-time.md § 查询忙闲](references/lark-calendar-schedule-clear-time.md#2-查询忙闲)。 + ## 前置条件路由 | 场景 | 前置要求 | |------|----------| -| 预约日程/会议、查会议室 | 先读 [lark-calendar-schedule-meeting.md](references/lark-calendar-schedule-meeting.md) | -| 编辑已有日程 | 先定位目标日程 `event_id`;若是重复性日程,必须定位到具体实例的 `event_id`(禁止使用原重复日程 ID) | -| 删除/修改后验证 | 等待 2 秒再查询(API 最终一致性),不要告知用户你等待了 | +| 预约日程/会议、调整时间、查会议室 | 先读 [lark-calendar-schedule-meeting.md](references/lark-calendar-schedule-meeting.md) | +| 仅编辑字段(标题/描述)或增删参会人 | 先定位 `event_id`,再读 [lark-calendar-update.md](references/lark-calendar-update.md) | +| 编辑已有日程(涉及时间或会议室) | 先定位目标日程 `event_id`;若是重复性日程,必须定位到具体实例的 `event_id`(禁止使用原重复日程 ID) | +| 编辑/删除重复性日程 | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md),按操作范围(仅此次/全部/此次及后续)执行 | | 调用任何 Shortcut | 先读其对应 reference 文档 | +## 写操作反馈 + +创建、更新、删除、RSVP 等写操作完成后,直接基于命令返回结果反馈用户;不要为了“确认是否生效”主动发起二次查询。只有用户明确要求复查,或命令返回信息不足以回答用户问题时,才需要再查询。 + ## 核心概念 -- **日程实例(Instance)**:重复性日程展开后的具体时间实例。操作重复日程的某次实例时,必须先定位该实例的 `event_id`,禁止使用原重复日程的 `event_id`。 +- **日程实例(Instance)**:重复性日程展开后的具体时间实例。「仅此次」操作时使用具体实例的 `event_id`;「全部」或「此次及后续」操作时需对原重复性日程操作(使用原日程 `event_id`),并按需处理例外。 +- **重复性日程例外(Exception)**:对重复性日程某次实例做过「仅此次」编辑后产生的独立日程(拥有独立 `event_id`)。删除/更新「全部」时必须同时处理例外,否则例外会残留。 - **全天日程(All-day Event)**:只按日期占用、没有具体起止时刻的日程,结束日期是包含在日程时间内的。 - **时间块 vs 时间范围**:时间块是具体确定的连续时间段(如 `14:00~15:00`),时间范围是泛指(如"今天下午")。`+room-find` 必须基于确定时间块,不能基于模糊范围。 - **会议室(Room)**:"room"不是"房间",是"会议室"。会议室是日程的一种参与人(resource attendee),不能脱离日程单独预定。 @@ -70,7 +126,9 @@ lark-cli calendar +agenda --as user | 按关键词搜索日程 | 本 skill(`+search-event`) | | 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill(`+meeting`) | | 从日程进一步拿 AI 智能纪要 / 逐字稿 / 妙记产物 | 先 `+meeting` 取 `meeting_id`,再 [`vc +detail`](../lark-vc/references/lark-vc-detail.md) → [`note +detail`](../lark-note/references/lark-note-detail.md) / [`minutes +detail`](../lark-minutes/references/lark-minutes-detail.md) | -| 预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) | +| 预约/改约日程、调整时间、添加/更换会议室、查会议室 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) | +| 仅编辑日程字段(标题/描述)或增删参会人(不涉及时间和会议室) | 先定位 `event_id`,再读 [+update](references/lark-calendar-update.md) 执行变更 | +| 编辑/删除重复性日程(「改这个重复日程」「删掉后面的」「全部取消」等) | 先读 [重复性日程操作规范](references/lark-calendar-recurring.md),确认操作范围后执行 | ## 任务类型分流 @@ -87,7 +145,7 @@ lark-cli calendar +agenda --as user ## 会议室规则 -- 凡是"预定/查询/搜索可用会议室",都必须进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md)。 +- 凡是"预定/查询/搜索可用会议室",都必须进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md),会议室参数规范详见 [+room-find](references/lark-calendar-room-find.md)。 - `+room-find` 的时间输入必须是确定时间块,不能是时间区间搜索。 - 用户仅要求"查会议室"但未提供明确时间时,必须先调用 `+suggestion` 获取可用时间块,再将时间块交给 `+room-find`。严禁猜测时间盲目调用。 - 编辑已有日程时,"添加会议室"默认是增量语义,保留已有会议室;只有用户明确说"更换会议室""移除会议室"时才删除旧会议室。 @@ -95,42 +153,45 @@ lark-cli calendar +agenda --as user ## API Resources ```bash +# 通用调用格式 lark-cli calendar <resource> <method> [flags] + +# 查询用户主日历 +lark-cli calendar calendars primary + +# 获取日程分享链接 +lark-cli calendar events share_info --calendar-id <calendar_id> --event-id <event_id> + +# 删除日程 +lark-cli calendar events delete --calendar-id <calendar_id> --event-id <event_id> ``` -### calendars +> `calendar_id` 可以直接传 `primary`,代表当前调用身份的主日历 ID。 - - `create` — 创建共享日历 - - `delete` — 删除共享日历 - - `get` — 查询日历信息 - - `list` — 查询日历列表 - - `patch` — 更新日历信息 - - `primary` — 查询用户主日历 - - `search` — 搜索日历 +### 查询资源的方法列表以及方法的使用方式 -### event.attendees +- 列出某资源下的方法:`lark-cli calendar <resource> -h` +- 查看方法的cli flag:`lark-cli calendar <resource> <method> -h` +- 查看方法API参数:`lark-cli schema calendar.<resource>.<method>` - - `batch_delete` — 删除日程参与人 - - `create` — 添加日程参与人 - - `list` — 获取日程参与人列表 +`<resource>` 为 `calendars`(日历本身)/ `events`(日程)/ `event.attendees`(参与人)/ `freebusys`(忙闲)。例:`lark-cli schema calendar.events.delete`。 -### events +## 常用其他域命令 - - `create` — 创建日程 - - `delete` — 删除日程 - - `get` — 获取日程 - - `instance_view` — 查询日程视图 - - `patch` — 更新日程 - - `share_info` — 获取日程分享链接 +```bash +# 搜索用户,更多参数详见 lark-contact +lark-cli contact +search-user --query <query> --as user -### freebusys - - - `list` — 查询主日历日程忙闲信息 +# 搜索群聊,更多参数详见 lark-im +lark-cli im +chat-search --query <query> --as user +``` ## 不在本 skill 范围 - 查询过去的视频会议记录 → [lark-vc](../lark-vc/SKILL.md) - 待办任务管理 → [lark-task](../lark-task/SKILL.md) +- 通讯录 → [lark-contact](../lark-contact/SKILL.md) +- 即时通讯 → [lark-im](../lark-im/SKILL.md) - 会议室物理设施管理 → 管理员后台 **注意(强制性):** diff --git a/skills/lark-calendar/references/lark-calendar-agenda.md b/skills/lark-calendar/references/lark-calendar-agenda.md deleted file mode 100644 index 86405ba8b..000000000 --- a/skills/lark-calendar/references/lark-calendar-agenda.md +++ /dev/null @@ -1,78 +0,0 @@ - -# calendar +agenda - -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 - -查看近期日程安排。只读操作,不修改任何日程。 - -需要的scopes: ["calendar:calendar.event:read"] - -## 命令 - -```bash -# 查看今天日程(默认) -lark-cli calendar +agenda - -# 自定义时间范围(ISO 8601) -lark-cli calendar +agenda --start "2026-03-10T00:00+08:00" --end "2026-03-17T00:00+08:00" - -# 自定义时间范围(仅日期) -lark-cli calendar +agenda --start 2026-03-10 --end 2026-03-17 - -# 人类可读格式输出 -lark-cli calendar +agenda --format pretty - -# 指定日历 -lark-cli calendar +agenda --calendar-id cal_xxx -``` - -## 参数 - -| 参数 | 必填 | 说明 | -|------|------|------| -| `--start <time>` | 否 | 开始时间(ISO 8601 或仅日期,默认当天) | -| `--end <time>` | 否 | 结束时间(默认与 `--start` 属于同一天,自动取当天结束时间) | -| `--calendar-id <id>` | 否 | 日历 ID(省略则使用主日历) | -| `--format` | 否 | 输出格式:json(默认) \| pretty | -| `--dry-run` | 否 | 预览 API 调用,不执行 | - -## 时间格式 - -`--start` 和 `--end` 支持以下格式: - -| 格式 | 示例 | 说明 | -|------|------|------| -| ISO 8601 | `2026-03-10T14:00:00+08:00` | 完整格式 | -| 日期+时间 | `2026-03-10 14:00:00` | 自动补全时区 | -| 仅日期 | `2026-03-10` | start 取 00:00:00,end 取 23:59:59 | -| Unix 时间戳 | `1741564800` | 秒级时间戳 | - -## 输出格式 - -**将结果整理为易读的日程表:** - -``` -## 2026-03-10 周一 - -09:00 - 09:30 站会 -10:00 - 11:00 产品评审 -14:00 - 15:00 与 Alice 1:1 - -## 2026-03-11 周二 - -(无日程) -``` - -**注意:按日期分组,并严格按照开始时间升序(从早到晚的时间线)排序输出。** 显示标题、时长 - -## 提示 - -- 已取消的日程会自动过滤,无需额外处理。 -- 如无日程,告知用户"日程清空"。 -- 大于 40 天的时间范围会自动拆分查询并合并结果。 -- 查看多个日历:先用 `lark-cli calendar calendars list --page-all` 列出日历列表,再逐个查询。 - -## 参考 - -- [lark-calendar](../SKILL.md) -- 日历全部命令 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 diff --git a/skills/lark-calendar/references/lark-calendar-create.md b/skills/lark-calendar/references/lark-calendar-create.md index 7d0b090e3..4036de2ba 100644 --- a/skills/lark-calendar/references/lark-calendar-create.md +++ b/skills/lark-calendar/references/lark-calendar-create.md @@ -1,12 +1,9 @@ # calendar +create -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 创建日程并按需邀请参会人。 -需要的scopes: ["calendar:calendar.event:create","calendar:calendar.event:update"] - ## 推荐命令 ```bash @@ -38,15 +35,16 @@ lark-cli calendar +create --summary "..." --start "..." --end "..." \ | `--description <text>` | 否 | 日程详细描述。提供会议议程、活动内容、注意事项或链接等。与 summary 配合使用,仅关注当前日程信息 | | `--attendee-ids <id_list>` | 否 | 参与人 ID 列表(逗号分隔)。支持用户(`ou_`)、群组(`oc_`)和会议室(`omm_`)。AI 提取时请务必保留对应前缀 | | `--calendar-id <id>` | 否 | 日历 ID(省略则使用主日历) | -| `--rrule <rrule>` | 否 | 重复日程的重复性规则,规则设置方式参考rfc5545。**【⚠️注意:系统绝对不支持 COUNT,如需限制重复次数,必须转为 UNTIL】**。示例值:"FREQ=DAILY;INTERVAL=1" | +| `--rrule <rrule>` | 否 | 重复日程的重复性规则,规则设置方式参考rfc5545。示例值:"FREQ=DAILY;INTERVAL=1;UNTIL=<具体日期>" | | `--dry-run` | 否 | 预览 API 调用,不执行 | -> **⚠️ `rrule` 规则限制:飞书日历系统不支持 `COUNT` 参数。遇到限制重复次数的需求,必须根据开始时间和频率自行推算并转换成 `UNTIL=<具体日期>` 格式。** +> 当用户表达'每周 X'、'每周重复'、'连续 N 周'时,必须使用 rrule 创建重复性日程,而非创建多个独立日程 > 自动设置 `attendee_ability: "can_modify_event"`,参会人可查看彼此并编辑日程。 > 自动设置 `free_busy_status: "busy"`,默认日程忙闲状态为忙碌。 > 自动设置 `reminders: [{"minutes": 5}]`,默认日程开始前 5 分钟提醒。 > 自动设置 `vchat: {"vc_type": "vc"}`,默认日程包含飞书视频会议。如需其他视频会议类型或不含视频会议,请使用完整 API 命令。 > 失败保护:若添加参会人失败(如 open_id 错误),CLI 会自动删除刚创建的空日程(回滚,不通知参会人)。 +> 审批会议室:`+create` 不暴露低频字段 `attendees[].approval_reason`。如果会议室要求审批,请使用用户身份先创建日程,再用完整 API `calendar event.attendees create --as user` 添加会议室并传 `approval_reason`。 ## 高级用法(完整 API 命令) @@ -55,37 +53,16 @@ lark-cli calendar +create --summary "..." --start "..." --end "..." \ - 全天日程的开始日期和结束日期必须分别是日程开始的第一天和结束的最后一天。如果只有一天的话,开始日期和结束日期是相同。 ```bash -# 第一步:创建日程(含高级参数) -## 查看完整参数定义 -lark-cli schema calendar.events.create -## 创建日程 -lark-cli calendar events create \ - --params '{"calendar_id":"<CALENDAR_ID>"}' \ - --data '{ - "summary": "技术分享:CLI 架构设计", - "start_time": { "timestamp": "1741586400" }, - "end_time": { "timestamp": "1741593600" } -}' - -# 第二步:添加参会人(使用第一步返回的 calendar_id 和 event_id) -## 查看完整参数定义 -lark-cli schema calendar.event.attendees.create -## 添加参会人 +## 添加需要审批的会议室(approval_reason 最大 200 字符) lark-cli calendar event.attendees create \ + --as user \ --params '{"calendar_id":"<CALENDAR_ID>","event_id":"<EVENT_ID>"}' \ - --data '{"attendees": [{"type": "user", "user_id": "ou_xxx"}]}' + --data '{"attendees": [{"type": "resource", "room_id": "omm_xxx", "approval_reason": "申请原因"}]}' -# 可选第三步(推荐):若第二步失败,回滚删除空日程 -## 查看完整参数定义 -lark-cli schema calendar.events.delete -## 删除空日程 -lark-cli calendar events delete \ - --params '{"calendar_id":"<CALENDAR_ID>","event_id":"<EVENT_ID>","need_notification":false}' - -``` - -> 完整 API 命令的时间参数是 **Unix 秒字符串**(非 ISO 8601)。 -> 当你手动拆成两步执行时,建议保留“失败后回滚删除”的第三步,避免遗留空日程。 +完整 API 命令的关键差异: +- 时间参数是 **Unix 秒字符串**(非 ISO 8601)。 +- 全天日程的开始日期和结束日期必须分别是日程开始的第一天和结束的最后一天;单日全天日程两者相同。 +- 手动拆成“创建日程 + 添加参会人”两步时,若第二步失败,建议删除刚创建的空日程,避免遗留无参会人的日程。 ## 参会人类型 @@ -101,6 +78,5 @@ lark-cli calendar events delete \ ## 参考 -- [lark-calendar](../SKILL.md) -- 日历全部命令 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 +- [lark-calendar](../SKILL.md) -- skill 入口与路由 - [lark-calendar-suggestion](lark-calendar-suggestion.md) -- 根据非明确时间或一段时间范围,推荐多个可用时间块方案 diff --git a/skills/lark-calendar/references/lark-calendar-freebusy.md b/skills/lark-calendar/references/lark-calendar-freebusy.md deleted file mode 100644 index bd59f933e..000000000 --- a/skills/lark-calendar/references/lark-calendar-freebusy.md +++ /dev/null @@ -1,124 +0,0 @@ - -# calendar +freebusy - -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md)。 - -查询用户主日历的忙闲信息,返回指定时间范围内的忙碌时段列表和rsvp的状态。 - -需要的scopes: ["calendar:calendar.free_busy:read"] - -## 命令 - -```bash -# 查询当前用户今天的忙闲(默认) -lark-cli calendar +freebusy - -# 自定义时间范围(仅日期) -lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 - -# 自定义时间范围(完整 ISO 8601) -lark-cli calendar +freebusy --start "2026-03-11T08:00:00+08:00" --end "2026-03-11T18:00:00+08:00" - -# 查询指定用户的忙闲信息 -lark-cli calendar +freebusy --start 2026-03-11 --end 2026-03-12 --user-id ou_xxx - -# 人类可读格式输出 -lark-cli calendar +freebusy --format pretty -``` - -## 参数 - -| 参数 | 必填 | 说明 | -|------|------|------| -| `--start <time>` | 否 | 查询开始时间(ISO 8601 或仅日期,默认当天) | -| `--end <time>` | 否 | 查询结束时间(默认与 `--start` 属于同一天,自动取当天结束时间) | -| `--user-id <open_id>` | 否 | 目标查询用户 ID(`ou_` 前缀)。省略时默认查询当前登录用户,bot 身份调用时必须明确指定 | -| `--format` | 否 | 输出格式:json(默认) \| pretty | -| `--dry-run` | 否 | 预览 API 调用,不执行 | - -## 时间格式 - -`--start` 和 `--end` 支持以下格式: - -| 格式 | 示例 | 说明 | -|------|------|------| -| ISO 8601 | `2026-03-11T09:00:00+08:00` | 完整格式 | -| 日期+时间 | `2026-03-11 09:00:00` | 自动补全时区 | -| 仅日期 | `2026-03-11` | start 取 00:00:00,end 取 23:59:59 | -| Unix 时间戳 | `1741564800` | 秒级时间戳 | - -## 输出示例 - -### 表格格式 - -``` -start end rsvp_status ----------------- ---------------- ----------- -2026-03-11 10:00 2026-03-11 10:30 接受 -2026-03-11 14:00 2026-03-11 15:00 待定 - -共 2 个忙碌时段 -``` - -### JSON 格式 - -```json -[ - { - "start_time": "2026-03-11T10:00:00+08:00", - "end_time": "2026-03-11T10:30:00+08:00", - "rsvp_status": "accept" - }, - { - "start_time": "2026-03-11T14:00:00+08:00", - "end_time": "2026-03-11T15:00:00+08:00", - "rsvp_status": "tentative" - } -] -``` - -## 典型场景 - -### 1. 查找日程会议空闲时段 - -```bash -# 查询今天的忙碌时段 -lark-cli calendar +freebusy - -# 查询工作时间段 -lark-cli calendar +freebusy \ - --start "2026-03-11T08:00:00+08:00" \ - --end "2026-03-11T18:00:00+08:00" -``` - -### 2. 检查团队成员可用性 - -```bash -# 查询多个成员,对比找出共同空闲时间 -lark-cli calendar +freebusy --start 2026-03-12 --user-id ou_member_a -lark-cli calendar +freebusy --start 2026-03-12 --user-id ou_member_b -``` - -## 注意事项 - -1. **只查询主日历** — 此命令只返回用户主日历的忙闲信息,不包括其他订阅日历 -2. **隐私保护** — 只返回忙碌时段的起止时间,不包含日程标题、描述等详细信息 -3. **bot 身份** — bot 必须通过 `--user-id` 指定要查询的用户 - -## 与其他命令对比 - -| 命令 | 用途 | 输出内容 | -|------|------|----------| -| `calendar +freebusy` | 查询忙闲时段 | 只返回忙碌时段列表(无日程详情) | -| `calendar +agenda` | 查看日程安排 | 返回完整日程列表(含标题、描述等) | - -**选择建议**: -- **仅需了解是否有空** → 使用 `+freebusy`(更快,隐私保护) -- **需要查看日程详情** → 使用 `+agenda` - -## 参考 - -- [lark-calendar-agenda](lark-calendar-agenda.md) — 查看日程安排 -- [lark-calendar-create](lark-calendar-create.md) — 创建日程 -- [lark-calendar-suggestion](lark-calendar-suggestion.md) — 根据非明确时间或一段时间范围,推荐多个可用时间块方案 -- [lark-calendar](../SKILL.md) — 日历完整 API diff --git a/skills/lark-calendar/references/lark-calendar-recurring.md b/skills/lark-calendar/references/lark-calendar-recurring.md new file mode 100644 index 000000000..54d36f727 --- /dev/null +++ b/skills/lark-calendar/references/lark-calendar-recurring.md @@ -0,0 +1,90 @@ +# 重复性日程操作规范 + +重复性日程的编辑/删除分为三种范围:「仅此次」「全部」「此次及后续」。用户未明确范围时,**必须询问确认**。 + +## 关键概念 + +- **event_id 结构**:`event_id` 的格式为 `{event_uid}_{originalTime}`。普通日程或重复性日程本体的 `originalTime` 为 `0`;例外的 `originalTime > 0`,代表该例外在原重复性序列中本来的时间位置。因此 `{event_uid}_0` 即为原重复性日程的 `event_id`。 +- **原重复性日程**:携带 `rrule` 的日程本体,`event_id` 形如 `{event_uid}_0`。系列的所有属性(标题、时间、rrule、描述等)都挂在本体上。 +- **例外(Exception)**:对某次实例做过「仅此次」编辑后产生的独立日程,`event_id` 形如 `{event_uid}_{originalTime}`(`originalTime > 0`)。通过 `event_uid` 部分即可关联回原重复性日程。 +- 删除/更新原重复性日程 **不会** 级联处理例外——必须手动逐个处理。 + +## 前置步骤(所有范围通用) + +1. 通过 `+agenda` 或 `+search-event` 定位重复性日程,获取原重复性日程的 `event_id`。 +2. 通过 `events instance_view` 或 `+agenda` 列出实例,识别哪些是例外(`event_id` 中 `originalTime > 0` 的即为例外)。 +3. 确认用户的操作范围。 + +## 编辑全部(更新时间) + +| 步骤 | 命令 | 说明 | +|------|------|------| +| 1 | `lark-cli calendar +update --event-id <原重复日程ID> --start ... --end ...` | 更新原重复性日程的时间 | +| 2 | `lark-cli calendar events delete --params '{"calendar_id":"<CAL_ID>","event_id":"<例外ID>","need_notification":false}'` (逐个) | 时间变更后例外已无意义,必须删除 | + +> 理由:更新时间会改变重复起止点,例外日程的原始占位已变,若保留会导致时间冲突或残留。 + +## 编辑全部(更新非时间字段) + +| 步骤 | 命令 | 说明 | +|------|------|------| +| 1 | `lark-cli calendar +update --event-id <原重复日程ID> --summary ... --description ...` | 更新原重复性日程的标题/描述等 | +| 2 | `lark-cli calendar +update --event-id <例外ID> --summary ... --description ...` (逐个) | 同步更新例外日程的对应字段 | + +> 理由:例外已脱离原重复性日程独立存在,不会自动继承原日程的更新。 + +## 删除全部 + +| 步骤 | 命令 | 说明 | +|------|------|------| +| 1 | `lark-cli calendar events delete --params '{"calendar_id":"<CAL_ID>","event_id":"<原重复日程ID>","need_notification":true}'` | 删除重复性日程本体 | +| 2 | `lark-cli calendar events delete --params '{"calendar_id":"<CAL_ID>","event_id":"<例外ID>","need_notification":false}'` (逐个) | 删除所有例外日程 | + +> 理由:例外是独立实体,删除原重复性日程不会级联删除例外。 + +## 编辑此次及后续 + +| 步骤 | 命令 | 说明 | +|------|------|------| +| 1 | `lark-cli calendar +update --event-id <原重复日程ID> --rrule "FREQ=...;UNTIL=<截止日期>"` | 截短原重复性日程(UNTIL 设为指定时间前一次实例的日期) | +| 2 | `lark-cli calendar events delete ...` (逐个) | 删除指定时间之后(含)的例外日程 | +| 3 | `lark-cli calendar +create --summary ... --start <指定时间> --end ... --rrule "FREQ=..." --attendee-ids ...` | 从指定时间开始创建新的重复性日程(即「后续」部分,携带编辑后的内容) | + +> UNTIL 计算规则:若用户选择「从第 N 次开始编辑」,UNTIL 应设置为第 N-1 次实例的日期(即保留到指定时间之前的最后一次)。 +> 新日程应继承原日程的参会人、会议室等配置(除非用户明确要修改)。 + +## 删除此次及后续 + +| 步骤 | 命令 | 说明 | +|------|------|------| +| 1 | `lark-cli calendar +update --event-id <原重复日程ID> --rrule "FREQ=...;UNTIL=<截止日期>"` | 截短原重复性日程(UNTIL 设为指定时间前一次实例的日期) | +| 2 | `lark-cli calendar events delete ...` (逐个) | 删除指定时间之后(含)的例外日程 | + +> 与「编辑此次及后续」的区别:不需要步骤 3(创建新的重复性日程),因为目标是删除后续而非替换。 + +## 仅此次 + +- **编辑仅此次**:通过 `+agenda` / `+search-event` 定位到具体实例的 `event_id`,然后正常调用 `+update`。 +- **删除仅此次**:定位到具体实例的 `event_id`,调用 `events delete`。 + +## 用户意图映射 + +| 用户表达 | 操作范围 | +|----------|----------| +| 「改这个重复日程的标题」「全部改」「每次都改」 | 编辑全部 | +| 「删掉这个重复日程」「取消所有」 | 删除全部 | +| 「从下周开始改时间」「后面的都改」 | 编辑此次及后续 | +| 「从下周开始不要了」「后面的都删」 | 删除此次及后续 | +| 「就改这一次」「只删这一次」 | 仅此次 | +| 未明确范围 | **必须询问用户** | + +## 注意事项 + +- 涉及时间戳计算(如推算 UNTIL 日期)时,必须调用系统命令或脚本,禁止心算。 + +## 参考 + +- [lark-calendar](../SKILL.md) — 日历全部命令 +- [lark-calendar-update](lark-calendar-update.md) — 更新日程 Shortcut +- [lark-calendar-create](lark-calendar-create.md) — 创建日程 Shortcut +- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/lark-calendar/references/lark-calendar-room-find.md b/skills/lark-calendar/references/lark-calendar-room-find.md index 0a94e1eec..bf1ed14a1 100644 --- a/skills/lark-calendar/references/lark-calendar-room-find.md +++ b/skills/lark-calendar/references/lark-calendar-room-find.md @@ -1,11 +1,8 @@ # calendar +room-find -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md)。 针对一个或多个时间块查找/搜索可用会议室。会议室是日程的一种资源型参与人,不能脱离日程单独预定。 -需要的 scopes: ["calendar:calendar.free_busy:read"] - ## 适用场景 - 已知一个或多个待选时间块,需要查找可用会议室 @@ -50,7 +47,7 @@ lark-cli calendar +room-find \ | `--city <text>` | 否 | 会议室所在城市强约束。**仅当**用户明确说出具体城市(如北京、上海)时才提取,**严禁**根据园区或楼宇名称自行联想或补全。 | | `--building <text>` | 否 | 会议室所在楼宇强约束,承载城市以下、楼层以上的办公区/园区/楼栋描述。| | `--floor <text>` | 否 | 仅用于筛选会议室所在楼层。应先做归一化,再传递规范值;例如 `2楼` / `二楼` / `2F` 统一为 `F2`。注意:此参数只筛选楼层,不可混入区域定位(如“A区”)或具体会议室号。 | -| `--room-name <text>` | 否 | 会议室名称约束,支持以**英文逗号**分隔传入多个名称。仅当用户明确提到会议室专名或会议室号(如"木星""02")时使用。当用户需要在一组编号会议室中搜索时(如"帮我约 16~20 号的会议室"),应将编号展开为逗号分隔列表,如 `"16,17,18,19,20"`。应优先传递去后缀、去冗余后的规范名,例如 `木星会议室` → `木星`,`会议室 02` / `02会议室` → `02`。 | +| `--room-name <text>` | 否 | 会议室名称约束,支持以**英文逗号**分隔传入多个名称。仅当用户明确提到会议室专名、会议室号或编号区间时使用。 | | `--min-capacity <n>` | 否 | 会议室最小容纳人数。当用户明确参会人数或提出“至少容纳N人”等要求时,提取数字放入此参数,必须为正整数。 | | `--max-capacity <n>` | 否 | 会议室最大容纳人数。用于过滤过大空间,必须为正整数。 | | `--attendee-ids <id_list>` | 否 | 参会对象 ID 列表。支持用户 ID(`ou_` 前缀)和群组 ID(`oc_` 前缀),多个 ID 以逗号分隔。 | @@ -67,7 +64,7 @@ lark-cli calendar +room-find \ - 同一语义槽位只保留一个规范值。例如用户说“2楼”,应转换为 `--floor "F2"`;**禁止**同时传 `2楼 F2` 这类重复楼层信息。 - 参数归类顺序应为:`city/building/floor` > `floor + room-name` 复合表达 > `room-name`。若短词更像楼层/区域定位(如 `2L`、`2F`),优先落到 `--floor`,不要默认落到 `--room-name`。像 `学清2层` 这种表达,通常拆为 `--building "学清"` 与 `--floor "F2"`。 - 对会议室名要做轻量归一化:`木星会议室` 应提取为 `--room-name "木星"`;`会议室 02` / `02会议室` 应提取为 `--room-name "02"`。 -- **多会议室名称场景**:当用户表达"帮我约 XX 到 YY 号之间的会议室"或一次提及多个会议室名称时,应将所有目标名称用英文逗号拼接传入 `--room-name`。例如: +- 当用户表达"帮我约 XX 到 YY 号之间的会议室"或一次提及多个会议室名称时,应将所有目标名称用英文逗号拼接传入 `--room-name`。例如: - "帮我约 16~20 号的会议室" → `--room-name "16,17,18,19,20"` - "查下木星和火星是否有空" → `--room-name "木星,火星"` - "看看 01、02、03 会议室" → `--room-name "01,02,03"` @@ -90,9 +87,8 @@ lark-cli calendar +room-find \ ``` > **AI 行为指导:** -> - **结构化展示时间块与会议室**:默认按“时间块 -> 会议室候选”的层级结构展示。**严禁将时间与会议室名称输出在同一行**。以清晰的分行列表呈现可用会议室,并直接询问用户意向。默认原样展示完整 `room_name`;不要擅自缩写、截断、改写,或仅提取楼层及会议室号替代完整名称。 +> - **结构化展示时间块与会议室**:默认按“时间块 -> 会议室候选”的层级结构展示,并直接询问用户意向。 > - **`room_name` 必须逐字透传**:展示给用户的会议室名称,必须直接使用 CLI/API 返回的 `room_name` 原值。禁止提取楼层、会议室号、容量、视频能力后重组成新的名称,禁止意译、缩写、去前缀、去后缀,或仅保留"便于阅读"的摘要名。 -> - **主动识别区间/多名称意图**:当用户提到"帮我约 XX 到 YY 号的会议室""XX~YY 之间的会议室"或一次列出多个会议室名称时,将所有目标名称展开为英文逗号分隔列表,传入 `--room-name`。例如"帮我约 16 到 20 号的会议室"应生成 `--room-name "16,17,18,19,20"`。 > - **重复日程要明确阻断原因与自动缩短**:若某候选会议室的 `reserve_until_time` 无法覆盖重复性日程,**必须**向用户明确说明该会议室最长可约至何时。若用户确认继续选用该会议室,你必须**自动将日程的重复规则结束时间缩短**至该 `reserve_until_time`,以防止会议室预约失败。不能直接按原规则继续。 > - **正确解释推荐结果**:如果返回结果与用户输入条件不完全字面一致,先说明底层可能返回邻近位置或相近条件的推荐候选,不要直接将其判定为异常。 > - **默认减少用户输入成本**:应主动引导用户不必一开始就提供很详细的会议室搜索条件。只要时间块已明确,用户直接表达“想约会议室”即可,先基于当前信息查询候选;只有在用户对结果不满意时,再引导其补充更具体的楼宇、楼层、会议室名或容量条件。 @@ -102,7 +98,7 @@ lark-cli calendar +room-find \ | 字段名 | 说明 | | :--- | :--- | | `room_id` | 会议室唯一标识,用于后续创建日程时添加为会议室参与人使用。 | -| `room_name` | 会议室名称,默认原样完整展示给用户,不要自行缩写、截断、改写,也不要用楼层及会议室号摘要替代原值。 | +| `room_name` | 会议室名称,展示给用户时必须使用原值。 | | `capacity` | 会议室最大容纳人数。 | | `reserve_until_time` | 该会议室当前允许被预约到的最晚时间点,用于校验重复性日程是否超期。 | @@ -110,4 +106,4 @@ lark-cli calendar +room-find \ - [lark-calendar-create](lark-calendar-create.md) - [lark-calendar-suggestion](lark-calendar-suggestion.md) -- [lark-calendar](../SKILL.md) — 日历完整 API +- [lark-calendar](../SKILL.md) — skill 入口与路由 diff --git a/skills/lark-calendar/references/lark-calendar-rsvp.md b/skills/lark-calendar/references/lark-calendar-rsvp.md index c63280560..796183f2e 100644 --- a/skills/lark-calendar/references/lark-calendar-rsvp.md +++ b/skills/lark-calendar/references/lark-calendar-rsvp.md @@ -1,11 +1,8 @@ # calendar +rsvp -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 回复指定的日程,更新当前用户的 RSVP 状态(接受、拒绝或待定)。 -需要的scopes: ["calendar:calendar.event:reply"] - ## 命令 ```bash @@ -38,5 +35,4 @@ lark-cli calendar +rsvp --calendar-id cal_xxx --event-id evt_xxx --rsvp-status a ## 参考 -- [lark-calendar](../SKILL.md) -- 日历全部命令 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 +- [lark-calendar](../SKILL.md) -- skill 入口与路由 diff --git a/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md b/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md new file mode 100644 index 000000000..fdc9a6d84 --- /dev/null +++ b/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md @@ -0,0 +1,59 @@ +# 明确时间分支:room-find + freebusy + 冲突处理 + +> 本文档处理**时间已明确**的场景。"明确时间"来源:用户直接表达(如"明天下午3点")、编辑流中已定位日程的原始 start/end、或经用户确认的 suggestion 时间块。 + +## 前置条件 + +进入此分支前,调度器([schedule-meeting.md](./lark-calendar-schedule-meeting.md))已完成: +- 任务类型判定(新建 / 编辑) +- 编辑流:目标 event_id 已定位 +- 新建流:默认值已补全 +- 时间已判定为**明确** + +## 流程 + +### 1. 查询会议室(如需) + +若用户需要会议室,先调用 `+room-find`。详见 [`lark-calendar-room-find.md`](./lark-calendar-room-find.md)。 + +```bash +lark-cli calendar +room-find \ + --slot "<start>~<end>" \ + --attendee-ids "<ids>" \ + --city "<city>" \ + --building "<building>" \ + --floor "<F2>" \ + --room-name "<room_name>" +``` + +时间块确定规则: +- **编辑流且不改时间,只新增会议室**:`--slot` 必须来自已定位日程的当前 `start/end` +- **编辑流且既改时间又加会议室**:`--slot` 必须来自候选新时间,而不是旧时间 + +详见 [`lark-calendar-room-find.md`](./lark-calendar-room-find.md)。 + +### 2. 查询忙闲 + +```bash +lark-cli calendar +freebusy --start "<start>" --end "<end>" +``` + +规则: +- 参与人过多(超过 5 人):仅查询**当前用户**及少数核心人员忙闲即可 +- 参与人含**群组**:无需展开群组成员查询忙闲 +- 如果用户是从 `+suggestion` 确认了时间块后进入本分支的,**无需再调用 `+freebusy`** + +### 3. 冲突处理 + +- **无冲突**:直接让用户选择会议室(如需),进入落地操作 +- **有冲突**:必须先说明冲突情况,询问用户: + - **继续当前时间** → 让用户选择会议室(如需),进入落地操作 + - **换时间** → 转入 [模糊时间分支](./lark-calendar-schedule-fuzzy-time.md) + +## 落地 + +根据任务类型: +- 新建 → [`+create`](./lark-calendar-create.md) +- 编辑 → [`+update`](./lark-calendar-update.md) + +落地规则详见 [schedule-meeting.md § 落地日程变更](./lark-calendar-schedule-meeting.md#落地日程变更)。 diff --git a/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md b/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md new file mode 100644 index 000000000..2c75b65a2 --- /dev/null +++ b/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md @@ -0,0 +1,88 @@ +# 模糊时间 / 无时间信息分支:suggestion + 批量查询 + +> 本文档处理**时间模糊**(如"明天下午""下周找个时间")或**完全无时间信息**的场景。核心动作是调用 `+suggestion` 产出候选时间块,再根据是否需要会议室决定后续步骤。 + +## 前置条件 + +进入此分支前,调度器([schedule-meeting.md](./lark-calendar-schedule-meeting.md))已完成: +- 任务类型判定(新建 / 编辑) +- 编辑流:目标 event_id 已定位 +- 新建流:默认值已补全 +- 时间已判定为**模糊**或**无时间信息** + +## 流程 + +### 1. 调用 suggestion + +详见 [`lark-calendar-suggestion.md`](./lark-calendar-suggestion.md)。 + +```bash +lark-cli calendar +suggestion \ + --start "<range_start>" \ + --end "<range_end>" \ + --attendee-ids "<ids>" \ + --duration-minutes <n> \ + --event-rrule "<rrule>" +``` + +规则: +- 用户完全没有提供时间信息时,先默认一个合理区间(如"今天剩余时间"或"近两天")再调用 +- 编辑流中,若用户说"改到明天下午""下周找个时间再约",基于用户期望的**新时间范围**调用,不要沿用旧时间 +- **不要在用户完全没给时间时反问"你想约什么时候"** — 先补合理区间再进入 suggestion + +### 2. 分支处理 + +#### 不需要会议室 + +获取多个推荐时间块后,直接向用户展示候选时间,用户确认后进入落地操作。 + +#### 需要会议室 + +获取候选时间块后,**不要急于让用户只选时间**。先将这些时间块一次性交给 `+room-find` 批量查询可用会议室,然后将【候选时间】与【对应的可用会议室列表】结构化展示,让用户一次性完成选择。 + +> **注意**:即使用户最初只说"查会议室"且未带时间,也必须强制走 suggestion → room-find 路径。 + +详见 [`lark-calendar-room-find.md`](./lark-calendar-room-find.md)。 + +### 3. 用户确认后 + +- 用户选中 `+suggestion` 返回的时间块后,**无需再次调用 `+freebusy`**,直接进入落地操作 +- **BLOCKING REQUIREMENT**:必须先向用户展示选项并等待确认,禁止在未获用户确认时直接创建/更新日程 + +## 模糊语义消解与长期记忆 + +针对存在歧义的时间场景,严禁主观臆断。典型例子: +- "上班后" / "下班前" +- 未明确上下午的 12 小时制时间 + +处理规则: +- 主动澄清真实意图,不自行猜测 +- 用户澄清后,将个性化定义沉淀为长期偏好 + +## 用户展示格式 + +向用户展示多个时间块及对应会议室时,**必须结构化分行排版**,严禁将时间与会议室放在同一行: + +```text +## 2026-03-27 周五 + +[选项 1] 14:00 - 15:00(参会人均空闲) + 可用会议室: + 1. 学清嘉创大厦B座-F2-02🎦(7人) + 2. 学清嘉创大厦B座-F2-05🎦(10人) + +[选项 2] 16:00 - 17:00(参会人均空闲) + 可用会议室: + 1. 学清嘉创大厦B座-F3-01🎦(6人) + 2. 学清嘉创大厦B座-F3-06🎦(8人) + +💡 请回复您倾向的选项编号以及对应的会议室序号,我来为您完成预定。 +``` + +## 落地 + +根据任务类型: +- 新建 → [`+create`](./lark-calendar-create.md) +- 编辑 → [`+update`](./lark-calendar-update.md) + +落地规则详见 [schedule-meeting.md § 落地日程变更](./lark-calendar-schedule-meeting.md#落地日程变更)。 diff --git a/skills/lark-calendar/references/lark-calendar-schedule-meeting.md b/skills/lark-calendar/references/lark-calendar-schedule-meeting.md index 57187ce9a..3430ef248 100644 --- a/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +++ b/skills/lark-calendar/references/lark-calendar-schedule-meeting.md @@ -1,206 +1,95 @@ # 预约/改约日程或会议、查询/搜索可用会议室的工作流 -## CRITICAL 执行摘要(先按这个骨架执行,再看下方细则) +## 执行摘要 -- **第一步永远是判断任务类型:新建日程,还是编辑已有日程。** 不要把“预约/查会议室”默认等同于“新建”。 -- **编辑已有日程时,必须先定位目标日程或实例的 `event_id`。** 用户一旦给出了既有日程锚点(标题、时间段、`这个日程`、`这场会`)并表达修改动作(加人、删人、改时间、换会议室等),默认走编辑流。 -- **默认做智能助理,不做表单填写机。** 能根据上下文补全的默认值就直接补全,避免把用户带入表单式问答。 -- **新建流先补默认值,编辑流先继承已定位日程信息。** 默认值包括标题、参会人、时长,以及在“完全无时间信息”时的默认时间范围;编辑流则优先复用已定位日程的标题、时间、已有参与人和会议室信息作为基线。 -- **只有三类场景才主动追问用户**:存在时间冲突、搜索结果无法唯一确定、时间语义本身有歧义。 -- **编辑流的时间基准必须明确。** 如果编辑时不改时间,则后续会议室搜索必须基于已定位日程的原始起止时间;如果既改时间又加会议室,必须先确定最终时间,再基于该时间搜索会议室。 -- **编辑流中“新增会议室”默认是增量语义。** 如果用户说的是“加会议室/再加一个会议室”,最终 `+update` 只做 `add`,默认保留已有会议室;只有在用户明确说“更换会议室/移除会议室”时,才执行旧会议室删除。 -- **明确时间**:若需要会议室,先 `+room-find`;再 `+freebusy` 判断参会人忙闲;有冲突时先说明冲突,再让用户决定继续当前时间还是改走 `+suggestion`。 -- **模糊时间或无时间信息**:先 `+suggestion` 产出候选时间块;若需要会议室,再把这些时间块批量交给 `+room-find`,将“候选时间 + 对应可用会议室”一次性展示给用户选择。 -- **BLOCKING REQUIREMENT: 只要面临时间方案(模糊时间/无时间)或会议室方案(需要会议室)的选择,必须先向用户展示选项并等待用户明确确认,绝对禁止在未获用户确认的情况下直接执行创建新日程或更新既有日程。** -- **用户选中了 `+suggestion` 返回的候选时间块后,不要再次调用 `+freebusy`。** 用户确认后直接进入最终落地操作:创建新日程,或更新既有日程。 -- **当用户说“查会议室”“找会议室”“搜可用会议室”时,默认意图是查会议室可用性,不是检索会议室资源名录。** -- **必须按顺序执行。** 不要跳过“任务类型判定”“目标日程定位(编辑流)”“补默认值/继承基线信息”“判断时间明确性”这些前置步骤。 - -> **💡 核心原则:做智能助理,充分利用默认值规则(如默认标题、时长、参与人等)自动补全信息。极力避免像“表单填写机”一样频繁打断并反问用户,仅在必须决策的冲突或无法唯一确定的场景下才发起询问。** +- **第一步永远是判断任务类型:新建日程,还是编辑已有日程。** +- **编辑已有日程时,必须先定位目标日程或实例的 `event_id`。** +- **默认做智能助理,不做表单填写机。** 能根据上下文补全的默认值就直接补全,仅在必须决策的冲突或无法唯一确定的场景下才发起询问。 +- **新建流先补默认值,编辑流先继承已定位日程信息。** +- **明确时间** → 进入 [明确时间分支](./lark-calendar-schedule-clear-time.md) +- **模糊时间或无时间信息** → 进入 [模糊时间分支](./lark-calendar-schedule-fuzzy-time.md) +- **BLOCKING REQUIREMENT**: 面临时间方案或会议室方案的选择时,必须先向用户展示选项并等待确认,禁止未经确认直接创建/更新日程。 +- **必须按顺序执行。** 不要跳过"任务类型判定""目标日程定位(编辑流)""补默认值/继承基线信息""判断时间明确性"这些前置步骤。 ## 严禁行为 -- **严禁在未读取对应子命令文档(如 `lark-calendar-room-find.md`、`lark-calendar-suggestion.md`)的情况下直接调用命令!** 必须先阅读文档掌握最新参数要求与规范。 -- **严禁在尚未判断“新建”还是“编辑”之前,就直接进入创建日程或查会议室动作。** -- **严禁把“给明天上午的‘产品发布会’加人/加群/加会议室”这类带有既有日程锚点 + 修改动词的请求,当成新建日程。** 这类请求必须先定位目标日程。 -- **严禁在编辑已有日程时跳过目标定位步骤。** 未拿到唯一的 `event_id` 前,不得调用 `+update`、也不得基于猜测时间去查会议室。 -- **严禁在用户仅要求“查会议室”但未提供明确时间时,直接调用 `+room-find`!** 必须先默认一个合理时间范围,调用 `+suggestion` 拿到候选时间块,再将时间块传给 `+room-find`。 -- **不要在用户完全没给时间时,直接反问“你想约什么时候”。** 先补一个合理时间范围,再进入 `+suggestion`。 -- **不要在“需要会议室 + 时间模糊”的场景下,先让用户只选时间。** 应先批量查出每个候选时间对应的可用会议室,再让用户一次性完成选择。 -- **不要在用户已经选中 `+suggestion` 候选时间后,再重复调用 `+freebusy`。** -- **不要在用户未明确说出城市时,仅凭园区/办公室名自动补城市。** -- **严禁在面临时间方案或会议室方案的选择时(模糊时间、无时间或需要会议室),未经用户确认就擅自创建新日程或更新既有日程。** +- **严禁在未读取对应子命令文档前直接调用命令。** +- **严禁在尚未判断"新建"还是"编辑"之前,就直接进入创建日程或查会议室动作。** +- **严禁把带有既有日程锚点 + 修改动词的请求当成新建日程。** +- **严禁在编辑已有日程时跳过目标定位步骤。** 未拿到唯一 `event_id` 前,不得调用 `+update`。 +- **严禁在面临时间/会议室方案选择时,未经用户确认就擅自创建/更新日程。** ## 适用场景 -- “帮我约个会” -- “下周找时间和 XX 开会” -- “帮我订个会议室” -- “帮我找/搜索一个可用的会议室” -- “帮我推荐一个我以前常用的会议室” -- “查询明天下午可用的会议室” -- “明天下午3点约个日程/日历” -- “把明天上午的日程‘产品发布会’加上 小明 -- “给下周一的周会换个会议室” -- “把这个日程改到明天下午,并加上学清 F201” +- "帮我约个会" / "下周找时间和 XX 开会" +- "帮我订/找/搜索一个可用会议室" +- "明天下午3点约个日程" +- "把明天上午的日程加上 小明" +- "给下周一的周会换个会议室" +- "把这个日程改到明天下午,并加上学清 F201" ## 核心概念 -- **会议室是日程的一种参与人(attendee / resource),不能脱离日程单独预定。** -- **预定或查找会议室,均需先确定时间块。** 在推荐可用会议室后,应顺势引导用户完成最终的**日程落地**操作:创建新日程,或更新既有日程。 - -## CRITICAL 约束 - -- **在调用任何具体的 CLI 子命令(如 `+room-find`、`+suggestion`、`+freebusy`、`+create`)前,必须先读取其对应的 Markdown 文档。** 禁止仅凭记忆组装命令参数,以确保符合各命令最新的业务约束和格式规范。 -- **当用户说“查会议室”“找会议室”“搜可用会议室”等,默认意图是查询会议室可用性,而不是检索会议室资源名录。** -- **必须严格按照下方【工作流】的步骤顺序完成任务。特别是单独查会议室时,若无明确时间,强制先走“模糊时间/无时间信息”分支调用 `+suggestion`。** +- **会议室是日程的一种参与人(attendee / resource),不能脱离日程单独预定。** +- **预定或查找会议室,均需先确定时间块。** +- **当用户说"查会议室""找会议室",默认意图是查会议室可用性,不是检索会议室资源名录。** ## 任务类型判定 | 类型 | 典型语言信号 | 第一动作 | |------|--------------|----------| -| 新建日程 | “约个会”“安排一个会议”“新建日程”“帮我订个会议室开会” | 补默认值,再进入时间判断 | -| 编辑已有日程 | “给某个日程加人/删人/加群/加会议室”“把某个日程改到…”“给这场会换个会议室” | 先定位目标日程 `event_id`,再进入后续流程 | +| 新建日程 | "约个会""安排会议""新建日程""订个会议室开会" | 补默认值,再进入时间判断 | +| 编辑已有日程 | "给某日程加人/删人/加会议室""把某日程改到…""换会议室" | 先定位目标 `event_id` | -进一步规则: +规则: +- 只要同时出现**既有日程锚点**(标题、时间段、`这个日程`、`这场会`)和**修改动词**(添加、移除、改到、换),默认判定为编辑。 +- 对重复性日程的编辑,必须先定位到对应实例的 `event_id`。 -- 只要同时出现**既有日程锚点**(标题、时间段、`这个日程`、`这场会`、某次实例)和**修改动词**(添加、移除、调整、改到、换、延后、提前),默认判定为**编辑已有日程**。 -- 对重复性日程的编辑,必须先定位到对应实例的 `event_id`,不能直接拿原重复日程的 `event_id` 做更新。 - -## 工作流 - -### 1. 编辑已有日程:先定位目标日程 - -一旦判定为编辑流,必须先定位目标日程;没有 `event_id` 就不能继续后续修改动作。 +## 编辑流:先定位目标日程 定位规则: +- 优先利用用户给出的标题、日期、时间范围等锚点,通过 `+agenda`、`+search-event` 或实例视图缩小范围 +- 命中多个候选日程时,必须向用户展示候选项并要求确认 +- 重复性日程必须继续定位到该次实例的 `event_id` -- 优先利用用户给出的标题、日期、时间范围、`这个日程/这场会` 等锚点,通过 `+agenda`、`+search-event` 或实例视图缩小范围。 -- 如果命中多个候选日程,必须向用户展示候选项并要求确认,禁止自行猜测。 -- 如果是重复性日程的某一次实例,必须继续定位到该次实例的 `event_id`。 +编辑流分支路由: -编辑流分支规则: +| 编辑子场景 | 下一步 | +|-----------|--------| +| 仅增删普通参会人/群组,不改时间,不涉及会议室 | 直接 `+update`(详见 [lark-calendar-update.md](./lark-calendar-update.md)) | +| 新增会议室,不改时间 | 基于已定位日程 start/end → [明确时间分支](./lark-calendar-schedule-clear-time.md) | +| 只改时间,不涉及会议室 | 判断时间明确性 → 对应分支 | +| 既改时间,又新增/更换会议室 | 先确定最终时间 → 再查会议室 → 落地 | -- **仅增删普通参会人/群组,不改时间,也不涉及会议室**:定位完成后可直接进入最终 `+update`。 -- **新增会议室,但不改时间**:必须基于已定位日程的当前 `start/end` 作为时间块执行 `+room-find`,不能因为用户没重复说时间就退回“无时间信息”。 -- **既改时间,又新增会议室**:必须先处理时间,拿到最终候选时间块后,再基于该时间执行 `+room-find`;最终只增量添加新会议室,不自动删除已有会议室。 -- **既改时间,又更换会议室**:必须先处理时间,拿到最终候选时间块后,再基于该时间执行 `+room-find`;只有在用户明确表达“更换”时,最终才执行“移除旧会议室 + 添加新会议室”。 -- **只改时间,不涉及会议室**:沿用下方时间工作流,但最终落地必须是 `+update`,不是 `+create`。 +## 新建日程:智能推断默认值 -### 2. 新建日程:智能推断默认值 -以下信息智能推断,减少频繁询问用户: +- **标题**:根据上下文自动生成;如无法推断,默认"会议" +- **参会人**:如未指定,默认仅用户自己 +- **时长**:基于上下文推断;默认 30 分钟 +- **无时间信息**:默认推断合理区间(如"今天"或"近两天"),进入时间推荐流程,禁止询问用户 -- **标题**:根据上下文自动生成,例如“沟通对齐”“需求讨论”;如无法推断,默认为“会议” -- **参会人**:如未明确指定其他人,默认参会人仅为**用户自己** -- **时长**:基于会议类型和上下文动态推断;如无法推断,默认为 30 分钟 -- **无任何时间信息**:默认推断一个合理区间(如“今天”或“近两天”),并进入时间推荐流程,禁止询问用户 +搜索参与人出现多个结果无法唯一确定时,必须询问用户并记录长期记忆。 -当搜索特定参与人(人、群)出现多个结果无法唯一确定时,必须询问用户进行选择确认,并将该偏好记录为长期记忆,以便后续自动识别。 - -### 3. 判断时间是否明确 - -这一步判断的是**最终要落地的目标时间**,不是只看用户原句里有没有重复说时间。 +## 判断时间是否明确 时间基准规则: +- **新建流**:使用用户给出的时间,或默认补全出的时间范围 +- **编辑流且不改时间**:已定位日程的当前 `start/end` 就是明确时间 +- **编辑流且改时间**:用户想改到的新时间;若表达模糊,进入模糊时间分支 +**注意**: 在执行修改日程/会议时间的任务时,必须先获取原日程的持续时长。如果用户只提供了新的开始时间,你必须根据原时长自动计算出新的结束时间,严格保持原时长不变,禁止擅自改变原日程的时长。 -- **新建流**:使用用户给出的时间,或默认补全出的时间范围作为时间基准。 -- **编辑流且不改时间**:已定位日程的当前 `start/end` 就是时间基准。后续如需查会议室,直接使用这个明确时间块。 -- **编辑流且改时间**:用户想改到的新时间才是时间基准;若表达模糊,则进入 `+suggestion`。 +## 分支路由 -分两类处理: +| 判定结果 | 下一步读取 | +|----------|-----------| +| 明确时间 | [schedule-clear-time.md](./lark-calendar-schedule-clear-time.md) | +| 模糊时间 / 无时间信息 | [schedule-fuzzy-time.md](./lark-calendar-schedule-fuzzy-time.md) | -- **明确时间**:如“明天下午3点” -- **模糊时间**:如“明天下午”“下周找个时间” - -### 4. 明确时间 - -明确时间时,需先判断是否需要会议室,如果需要,提前查询会议室;然后判断是否有时间冲突。这里的“明确时间”既可以来自用户直接表达,也可以来自已定位日程的原始时间。 -详见 [`+room-find`](./lark-calendar-room-find.md) 与 [`+freebusy`](./lark-calendar-freebusy.md)。 - -```bash -# 1. 如果需要会议室,提前查询会议室 -lark-cli calendar +room-find \ - --slot "<start>~<end>" \ - --attendee-ids "<ids>" \ - --city "<city>" \ - --building "<building>" \ - --floor "<F2>" \ - --room-name "<room_name>" - -# 2. 查询当前用户及其他参会人忙闲 -# (如果有多名参会人,需分别调用查询:--user-id "<ou_xxx>") -lark-cli calendar +freebusy --start "<start>" --end "<end>" -``` - -规则: - -- **参会人过多或包含群组时的处理**: - - 如果参与人过多(例如超过 5 人),为避免高耗时,仅需查询**当前用户(自己)**及少数核心人员的忙闲状态即可。 - - 如果参与人中包含**群组**,无需展开群组成员查询其忙闲状态。 -- **编辑已有日程且不改时间,只新增会议室时**:这里的 `--slot` 必须来自已定位日程的当前 `start/end`。 -- **编辑已有日程且既改时间又加会议室时**:这里的 `--slot` 必须来自候选新时间,而不是旧时间;如果用户是“新增会议室”,后续落地只做添加,不删除旧会议室。 -- **如果没有冲突**:直接让用户选择会议室(如需),然后进入最终落地操作:创建新日程,或更新既有日程 -- **如果有冲突**:必须先说明冲突情况,询问用户继续选择这个时间还是换个时间 - - **如果说换个时间**:放弃当前时间,转入【模糊时间】流程,调用 `+suggestion` 推荐多个可用时间块 - - **如果继续选择这个时间**:直接让用户选择会议室(如需),然后进入最终落地操作:创建新日程,或更新既有日程 -- 位置信息要优先拆到结构化字段:用户明确说了城市才提取 `--city`;`--building` 不要再重复携带城市前缀。 -- 参数归类顺序应为:`city/building/floor` > `floor + room-name` 复合表达 > `room-name`。像 `2L`、`2F` 这类更像楼层或区域定位的短词,优先视为 `--floor`,不要默认当作 `--room-name`。像 `学清2层` 这种表达,通常拆为 `--building "学清"` 与 `--floor "F2"`。 -- 会议室名要做轻量归一化:`木星会议室` -> `--room-name "木星"`;`会议室 02` / `02会议室` -> `--room-name "02"`。 -- 对 `F3-05` / `F5-07` / `3楼-08` 这类复合表达,若能稳定识别楼层与会议室号,应优先提取为 `--floor + --room-name`,不要把整段直接退化成 `--room-name`。 - -### 5. 模糊时间或无时间信息 - -先调用: -详见 [`+suggestion`](./lark-calendar-suggestion.md);若需要会议室,再结合 [`+room-find`](./lark-calendar-room-find.md)。 - -```bash -lark-cli calendar +suggestion \ - --start "<range_start>" \ - --end "<range_end>" \ - --attendee-ids "<ids>" \ - --duration-minutes <n> \ - --event-rrule "<rrule>" -``` - -规则: - -- 若用户完全没有提供时间信息,应先默认一个合理区间后再调用 `+suggestion` -- 编辑流中,若用户表达的是“改到明天下午”“下周找个时间再约”这类模糊新时间,则基于用户期望的新时间范围调用 `+suggestion`;不要继续沿用旧时间。 -- **不需要会议室**:获取多个推荐时间块后,直接向用户展示候选时间,用户确认后进入最终落地操作:创建新日程,或更新既有日程。 -- **需要会议室**:获取多个候选时间块后,**不要急于让用户选时间**。先将这些时间块一次性交给 `calendar +room-find` 批量查询可用会议室,然后将【候选时间】与【对应的可用会议室列表】结构化分行展示,让用户一次性完成选择。(**注意:即使用户最初只说“查会议室”,且未带时间,也必须强制走到这一步,先 suggestion 再 room-find**)。 -- 用户一旦选择了 `+suggestion` 返回的时间块,**无需再次调用 `+freebusy`** - -### 6. 模糊语义消解与长期记忆构建 - -针对用户专属的时间表达习惯或存在歧义的时间场景,严禁主观臆断。典型例子包括: - -- “上班后” -- “下班前” -- 未明确上下午的 12 小时制时间表达 - -处理规则: - -- 应主动澄清真实意图,而不是自行猜测 -- 当用户给出澄清后,应将这类个性化定义沉淀为长期偏好,推动后续直接理解类似表达 - -### 7. 重复性日程 - -若当前会议为重复性日程,调用 `+room-find` 时需携带 `--event-rrule`。 - -必须检查返回中的: - -- `reserve_until_time` - -若候选会议室的可预约上限早于重复规则覆盖范围,**不要直接按原规则落地日程**。应: - -- 向用户明确说明该会议室最长可约至何时。 -- 若用户确认继续选用该会议室,你必须**自动将日程的重复规则结束时间缩短**至该 `reserve_until_time`,以防止会议室预约失败。 - -### 8. 落地日程变更 +## 落地日程变更 用户确认后调用: -如果是新建会议,详见 [`+create`](./lark-calendar-create.md)。 -如果是更新既有日程,详见 [`+update`](./lark-calendar-update.md)。必须先定位目标 `event_id`,再按用户意图用 `+update` 独立执行字段更新、添加参会人/会议室、移除参会人/会议室,或组合这些动作。若用户意图是“新增会议室”,默认仅追加 `room_id`,不移除已有会议室。 +- 新建 → [`+create`](./lark-calendar-create.md) +- 编辑 → [`+update`](./lark-calendar-update.md) ```bash lark-cli calendar +create \ @@ -214,52 +103,20 @@ lark-cli calendar +update \ --start "<start>" \ --end "<end>" \ --add-attendee-ids "omm_new_room" - -# 仅当用户明确要求“更换会议室”时,才同时移除旧会议室并添加新会议室 -lark-cli calendar +update \ - --event-id "<event_id>" \ - --remove-attendee-ids "omm_old_room" \ - --add-attendee-ids "omm_new_room" ``` -规则: -- 新建日程时,可使用 `+create` -- 更新既有日程时,优先使用 `+update`。改时间/标题/描述、添加参会人/会议室、移除参会人/会议室可以分别独立执行; -- 编辑流必须始终沿用前面定位得到的目标 `event_id`;禁止在最后一步重新按标题猜测一次目标日程。 -- 编辑流中如果只是新增群组或普通参会人,不涉及时间和会议室,可直接 `+update --add-attendee-ids ...`。 -- 编辑流中如果是“新增会议室但不改时间”,必须先基于目标日程原始时间查到可用会议室,再 `+update --add-attendee-ids "<room_id>"`;默认保留已有会议室。 -- 编辑流中如果是“既改时间又新增会议室”,顺序必须是:先确定最终时间,再查会议室,最后一次性 `+update` 时间与新增会议室;默认保留已有会议室。 -- 编辑流中如果是“既改时间又更换会议室”,顺序必须是:先确定最终时间,再查会议室,最后一次性 `+update` 时间、移除旧会议室并添加新会议室。 -- 需要会议室时,将选中的 `room_id` 写入最终落地请求的参与人列表 -- 展示会议室候选时,必须保留 CLI/API 返回的完整 `room_name` 原值;允许附加“推断说明”,但禁止用摘要名、楼层及会议室号、容量/视频标签重组后的名称替换原值 - -## 用户展示建议 - -当向用户展示多个时间块及对应的多个会议室时,**必须使用结构化清晰的格式排版**。**严禁将时间与会议室名称放在同一行展示**,必须分行并使用编号列表呈现可用会议室,严禁将所有信息揉成一团纯文本堆叠。 - -**推荐展示格式参考:** - -```text -## 2026-03-27 周五 - -[选项 1] 14:00 - 15:00(参会人均空闲) - 可用会议室: - 1. 学清嘉创大厦B座-F2-02🎦(7人) - 2. 学清嘉创大厦B座-F2-05🎦(10人) - -[选项 2] 16:00 - 17:00(参会人均空闲) - 可用会议室: - 1. 学清嘉创大厦B座-F3-01🎦(6人) - 2. 学清嘉创大厦B座-F3-06🎦(8人) - -💡 请回复您倾向的选项编号以及对应的会议室序号,我来为您完成预定。 -``` +落地规则: +- 编辑流必须始终沿用前面定位得到的目标 `event_id`;禁止在最后一步重新猜测目标日程 +- 编辑流中"新增会议室"默认仅追加 `room_id`,不移除已有会议室 +- 仅当用户明确说"更换会议室"时,才同时 `--remove-attendee-ids` 旧 + `--add-attendee-ids` 新 +- 需要会议室时,将选中的 `room_id` 写入参与人列表 ## 参考 +- [lark-calendar-schedule-clear-time.md](./lark-calendar-schedule-clear-time.md) +- [lark-calendar-schedule-fuzzy-time.md](./lark-calendar-schedule-fuzzy-time.md) - [lark-calendar-room-find.md](./lark-calendar-room-find.md) -- [lark-calendar-freebusy.md](./lark-calendar-freebusy.md) - [lark-calendar-suggestion.md](./lark-calendar-suggestion.md) - [lark-calendar-create.md](./lark-calendar-create.md) -- [lark-shared](../../lark-shared/SKILL.md) -- [lark-calendar](../SKILL.md) +- [lark-calendar-update.md](./lark-calendar-update.md) +- [SKILL.md](../SKILL.md) diff --git a/skills/lark-calendar/references/lark-calendar-search-event.md b/skills/lark-calendar/references/lark-calendar-search-event.md deleted file mode 100644 index e2addb5cb..000000000 --- a/skills/lark-calendar/references/lark-calendar-search-event.md +++ /dev/null @@ -1,29 +0,0 @@ - -# calendar +search-event - -按关键词、时间范围和参会人搜索日历日程。只读。 - -## 命令 - -```bash -# 按关键词 -lark-cli calendar +search-event --query "周会" - -# 按时间范围(ISO 8601 或 YYYY-MM-DD) -lark-cli calendar +search-event --start "2026-04-20T00:00:00+08:00" --end "2026-04-27T23:59:59+08:00" - -# 按参会人(自动识别 ou_ 用户 / oc_ 群聊 / omm_ 会议室前缀) -lark-cli calendar +search-event --attendee-ids "ou_user1,oc_chat1,omm_room1" - -# 组合 -lark-cli calendar +search-event --query "周会" --start 2026-04-20 --end 2026-04-27 --attendee-ids "ou_user1" -``` - -## 输出字段 - -`items` 列表每条返回 `event_id` / `summary` / `start` / `end` / `is_all_day` / `app_link`;外层有 `has_more`、`page_token`。**仅返回基础字段,要拿日程详情用 `calendar events get`。** - -## 注意事项 - -- 分页:`has_more=true` 时持续用 `page_token` 翻页直到 false,不要遗漏;`page-size` 最大 30。 -- 已结束的会议优先用 `vc +search`——日历不收录"即时会议",只查日程会漏。 diff --git a/skills/lark-calendar/references/lark-calendar-suggestion.md b/skills/lark-calendar/references/lark-calendar-suggestion.md index 1606ebd4c..102568af9 100644 --- a/skills/lark-calendar/references/lark-calendar-suggestion.md +++ b/skills/lark-calendar/references/lark-calendar-suggestion.md @@ -1,6 +1,5 @@ # calendar +suggestion -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md)。 根据非明确时间或一段时间范围,推荐多个可用时间块方案。帮助用户解决协调时间的难题。 @@ -8,8 +7,6 @@ - ✅ **当用户需求涉及寻找时间块,且时间未完全确定**(如`今天`、`近三天`、`本周`、`下午`, `无时间描述`)时,调用此工具来获取推荐时间块给用户选择(包括但不限于预约日程)。 - ❌ **当用户已经明确了具体的时间点**(如`今天下午3点`),则**不需要**调用此工具 -需要的scopes: ["calendar:calendar.free_busy:read"] - ## 命令 ```bash @@ -121,5 +118,4 @@ lark-cli calendar +suggestion \ ## 参考 - [lark-calendar-create](lark-calendar-create.md) — 创建日程 -- [lark-calendar-freebusy](lark-calendar-freebusy.md) — 查询忙闲时段和rsvp状态 -- [lark-calendar](../SKILL.md) — 日历完整 API \ No newline at end of file +- [lark-calendar](../SKILL.md) — skill 入口与路由 diff --git a/skills/lark-calendar/references/lark-calendar-update.md b/skills/lark-calendar/references/lark-calendar-update.md index 834ed9acf..9d879e08d 100644 --- a/skills/lark-calendar/references/lark-calendar-update.md +++ b/skills/lark-calendar/references/lark-calendar-update.md @@ -1,13 +1,10 @@ # calendar +update -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 更新既有日程字段,或独立增量添加/移除参会人和会议室。 `+update` 支持三类互相独立的动作:更新日程字段、添加参会人/会议室、移除参会人/会议室。它们可以单独执行,也可以在同一次命令中组合执行。 -需要的 scopes: ["calendar:calendar.event:update"] - ## 推荐命令 ```bash @@ -43,7 +40,7 @@ lark-cli calendar +update \ | 参数 | 必填 | 说明 | |------|------|------| -| `--event-id <id>` | 是 | 要更新的日程 ID。重复性日程要先定位到目标实例的 `event_id`,不要直接使用原重复日程 ID | +| `--event-id <id>` | 是 | 要更新的日程 ID。重复性日程请根据操作范围选择 ID,详见 [重复性日程操作规范](lark-calendar-recurring.md) | | `--calendar-id <id>` | 否 | 日历 ID(省略则使用 `primary`) | | `--summary <text>` | 否 | 新日程标题。仅在显式传入 `--summary` 时更新;若传空字符串,会把标题清空 | | `--description <text>` | 否 | 新日程描述。目前 API 方式不支持编辑富文本描述;如果日程描述通过客户端编辑为富文本内容,则使用 API 更新描述会导致富文本格式丢失。仅在显式传入 `--description` 时更新;若传空字符串,会把描述清空 | @@ -65,9 +62,9 @@ lark-cli calendar +update \ - 只想修改标题、描述、时间或重复规则时,不需要同时传 `--add-attendee-ids` 或 `--remove-attendee-ids`。 - 如需替换某个参与人、群组或会议室,使用 `--remove-attendee-ids <旧ID>` + `--add-attendee-ids <新ID>`。 - 会议室是 resource attendee,必须使用 `omm_` ID 添加到参会人列表,不能脱离日程单独预定。 -- 更新重复性日程的某一次实例时,必须先通过 `+agenda`、`+search-event` 或实例视图定位该实例的 `event_id`。 -- 如果需要验证更新结果,等待至少 2 秒后再查询,避免同步延迟导致读到旧数据。 +- 更新重复性日程时,必须先确定操作范围(仅此次/全部/此次及后续),然后按 [重复性日程操作规范](lark-calendar-recurring.md) 执行。 - 当同一次命令组合多个动作时,执行顺序为“日程字段 -> 移除参会人 -> 添加参会人”。若中途失败,不会自动回滚已成功步骤;错误信息会说明已完成的步骤。 +**⚠️ 高风险操作**: 修改时间时必须先读取原日程时长并计算新 end。如果 end 计算错误,会导致日程时长变化,用户会直接感知,禁止擅自改变原日程的时长。 ## 高级用法(完整 API 命令) @@ -98,8 +95,6 @@ lark-cli calendar +update \ ## 参考 -- [lark-calendar](../SKILL.md) -- 日历全部命令 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 +- [lark-calendar](../SKILL.md) -- skill 入口与路由 - [lark-calendar-schedule-meeting](lark-calendar-schedule-meeting.md) -- 预约/改约会议与会议室工作流 - [lark-calendar-room-find](lark-calendar-room-find.md) -- 查找可用会议室 -- [lark-calendar-freebusy](lark-calendar-freebusy.md) -- 查询忙闲 diff --git a/skills/lark-doc/SKILL.md b/skills/lark-doc/SKILL.md index 10b6876db..3ad4a3c27 100644 --- a/skills/lark-doc/SKILL.md +++ b/skills/lark-doc/SKILL.md @@ -1,11 +1,11 @@ --- name: lark-doc version: 2.0.0 -description: "飞书云文档(Docx / Wiki 文档):读取和编辑飞书文档内容。当用户给出文档 URL 或 token,或需要查看、创建、编辑文档、插入或下载文档图片附件时使用。文档中嵌入的电子表格、多维表格、画板,先用本 skill 提取 token 再切到对应 skill。当用户给出 doubao.com 的 /docx/ 或 /wiki/ URL/token 时,也应直接使用本 skill;路由依据是 URL 路径模式和 token,而不是域名。不负责文档评论管理,也不负责表格或 Base 的数据操作。" +description: "飞书云文档(Docx / Wiki 文档):读取和编辑飞书文档内容。当用户给出文档 URL 或 token,或需要查看、创建、编辑文档、插入或下载文档图片附件时使用。文档中嵌入的电子表格、多维表格、画板,先用本 skill 提取 token 再切到对应 skill。当用户给出 doubao.com 的 /docx/ 或 /wiki/ URL/token 时,也应直接使用本 skill;路由依据是 URL 路径模式和 token,而不是域名。不负责文档评论管理,也不负责表格或 Base 的数据操作。当用户明确要操作飞书思维笔记时,也使用本 skill。" metadata: requires: bins: ["lark-cli"] - cliHelp: "lark-cli docs --help; lark-cli docs +create --help; lark-cli docs +fetch --help; lark-cli docs +update --help; lark-cli docs +resource-download --help; lark-cli docs +resource-update --help; lark-cli docs +resource-delete --help" + cliHelp: "lark-cli docs --help;lark-cli mindnotes --help" --- # docs @@ -24,12 +24,12 @@ lark-cli docs +update --doc "文档URL或token" --command append --content '<p> **CRITICAL — 执行对应操作前,MUST 先用 Read 工具读取以下文件,缺一不可:** 1. [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) — 认证、权限处理、全局参数(所有操作通用) 2. **读取文档(`docs +fetch`)** → 必读 [`lark-doc-fetch.md`](references/lark-doc-fetch.md)(`--scope` / `--detail` 选择、局部读取策略、`<fragment>` / `<excerpt>` 输出结构) -3. **创建或编辑文档内容** → 必读 [`lark-doc-xml.md`](references/lark-doc-xml.md)(XML 语法规则,仅当用户明确要求 Markdown 时改读 [`lark-doc-md.md`](references/lark-doc-md.md))和 [`lark-doc-style.md`](references/style/lark-doc-style.md)(元素选择、丰富度规则、颜色语义);从零创建时加读 [`lark-doc-create-workflow.md`](references/style/lark-doc-create-workflow.md);编辑已有文档时加读 [`lark-doc-update.md`](references/lark-doc-update.md) 和 [`lark-doc-update-workflow.md`](references/style/lark-doc-update-workflow.md) +3. **创建或编辑文档内容** → 必读 [`lark-doc-xml.md`](references/lark-doc-xml.md)(XML 语法规则,仅当用户明确要求 Markdown 时改读 [`lark-doc-md.md`](references/lark-doc-md.md))和必读 [`lark-doc-style.md`](references/style/lark-doc-style.md)(写作原则:默认段落、按体裁、组件克制);从零创建时加读 [`lark-doc-create-workflow.md`](references/style/lark-doc-create-workflow.md);编辑已有文档时加读 [`lark-doc-update.md`](references/lark-doc-update.md) 和 [`lark-doc-update-workflow.md`](references/style/lark-doc-update-workflow.md) **未读完以上文件就执行相应操作会导致参数选择错误或格式错误。** > **格式选择规则(全局):** -> - **创建 / 导入场景**(`docs +create`,或 `docs +update --command append/overwrite` 的整段写入):XML 和 Markdown 都可以。用户提供 `.md` 本地文件、或明确说"导入 Markdown"时,直接用 Markdown;否则默认 XML(可用 callout、grid、checkbox 等富 block)。 +> - **创建 / 导入场景**(`docs +create`,或 `docs +update --command append/overwrite` 的整段写入):XML 和 Markdown 都可以。用户提供 `.md` 本地文件、或明确说"导入 Markdown"时,直接用 Markdown;否则默认 XML。 > - **精准编辑场景**(`docs +update` 的 `str_replace` / `block_insert_after` / `block_replace` / `block_delete` / `block_move_after` 等局部精修指令):优先使用 XML(`--doc-format xml`,即默认值)。XML 能稳定表达 block 结构和样式,局部精修更可控;不要因为 Markdown 更简单就自行切换。 ## 快速决策 @@ -39,12 +39,14 @@ lark-cli docs +update --doc "文档URL或token" --command append --content '<p> - 连续执行多个文档写操作时,必须按 [`lark-doc-update.md`](references/lark-doc-update.md) 的「Block ID 生命周期」判断旧 block ID 是否还能复用;`overwrite` / `block_replace` / `block_delete` 后不要复用受影响的旧 ID,插入 / 复制后要重新 fetch 才能拿到新 block ID - 用户需要在文档内**创建、复制或移动**资源块(画板、电子表格、多维表格等)时,必须先读取 [`lark-doc-xml.md`](references/lark-doc-xml.md) 的「三、资源块」章节 - 写文档时,由内容和用户意图决定表达形式;流程、架构、路线图、关键指标等信息可以使用画板,但不要默认把重要信息都画板化 -- 新增画板必须隔离到 SubAgent:简单图由 SubAgent 直接插入 `<whiteboard type="svg">完整 SVG</whiteboard>`,不读 `lark-whiteboard`;复杂图才由主 Agent 先建 `<whiteboard type="blank"></whiteboard>`,再启动 SubAgent 读取 `lark-whiteboard` 写入 +- 新增或更新画板时,按 [`lark-doc-whiteboard.md`](references/lark-doc-whiteboard.md) 选型;Mermaid 可由主 Agent 直接插入,SVG / 复杂图 / 已有画板更新按其中流程隔离到 SubAgent - 用户说"看一下文档里的图片/附件/素材""预览素材" → 用 `lark-cli docs +media-preview` - 用户明确说"下载素材" → 用 `lark-cli docs +media-download` +- 用户想把文档回滚到某个 `revision_id` 或某一时刻 → 先读 [`lark-doc-history.md`](references/lark-doc-history.md),按其中流程操作 - 用户明确说"下载/更新/删除文档封面图" → 用 `lark-cli docs +resource-download/+resource-update/+resource-delete --type cover` - `resource-*` 目前仅支持 Docx 封面资源;其他图片、附件或素材请走 `+media-*` - 如果目标是画板/whiteboard/画板缩略图 → 只能用 `lark-cli docs +media-download --type whiteboard`(不要用 `+media-preview`) +- 用户明确要操作思维笔记时;已有**思维笔记**,走 [思维笔记链路](references/lark-doc-mindnote.md);新建**思维笔记**,走 [lark-doc-whiteboard](references/lark-doc-whiteboard.md) - 拿到 spreadsheet URL/token 后 → 切到 `lark-sheets` 做对象内部操作 - 用户需要统计文档的**总字数 / 总字符数**(word count / character count)时,先读取 [`lark-doc-word-stat.md`](references/lark-doc-word-stat.md),并按其中流程调用 [`scripts/doc_word_stat.py`](scripts/doc_word_stat.py);统计口径以该脚本为准,不要改用其他方式自行计算。 - 用户说"给文档加评论""查看评论""回复评论""给评论加/删除表情 reaction" → 切到 `lark-drive` 处理 @@ -68,6 +70,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli docs +<verb> [flags]`) | [`+create`](references/lark-doc-create.md) | Create a Lark document (XML / Markdown) | | [`+fetch`](references/lark-doc-fetch.md) | Fetch Lark document content (XML / Markdown / im-markdown; `im-markdown` only after fetch for `lark-im`) | | [`+update`](references/lark-doc-update.md) | Update a Lark document (str_replace / block_insert_after / block_replace / ...) | +| [`+history-list` / `+history-revert` / `+history-revert-status`](references/lark-doc-history.md) | List document history, revert to a `history_version_id`, and query revert task status | | [`+media-insert`](references/lark-doc-media-insert.md) | Insert a local image or file at the end of a Lark document (4-step orchestration + auto-rollback). Prefer `--from-clipboard` when the image is already on the system clipboard (screenshots, copy from Feishu/browser); use `--file` only for on-disk sources. | | [`+media-download`](references/lark-doc-media-download.md) | Download document media or whiteboard thumbnail (auto-detects extension) | | [`+media-preview`](references/lark-doc-media-preview.md) | Preview document media file (auto-detects extension) | diff --git a/skills/lark-doc/references/lark-doc-create.md b/skills/lark-doc/references/lark-doc-create.md index ce2860136..461e76ec0 100644 --- a/skills/lark-doc/references/lark-doc-create.md +++ b/skills/lark-doc/references/lark-doc-create.md @@ -2,14 +2,14 @@ > **前置条件(MUST READ):** 生成文档内容前,必须先用 Read 工具读取以下文件,缺一不可: > 1. [`lark-doc-xml.md`](lark-doc-xml.md) — XML 语法规则(使用 Markdown 格式时改读 [`lark-doc-md.md`](lark-doc-md.md)) -> 2. [`lark-doc-style.md`](style/lark-doc-style.md) — 排版指南(元素选择、丰富度规则、颜色语义) -> 3. [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) — 从零创作工作流(Code-Act Loop、并行执行策略) +> 2. [`lark-doc-style.md`](style/lark-doc-style.md) — 写作原则(默认段落、按体裁、组件克制) +> 3. [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) — 从零创作工作流(Code-Act Loop、单 Agent 串行撰写) > > **未读完以上文件就生成内容会导致格式错误。** 从 XML(默认)或 Markdown 内容创建一个新的飞书云文档。 -> **⚠️ 格式选择规则:** 创建 / 导入场景下 XML 和 Markdown 都可以——用户提供 `.md` 本地文件、或明确说"导入 Markdown"时,直接用 Markdown;没有明确指示时默认 XML(表达能力更强,支持 callout、grid、checkbox 等富 block 类型)。不要在用户没要求的情况下主动从 XML 切到 Markdown,也不要在用户已给出 Markdown 时强行改成 XML。 +> **⚠️ 格式选择规则:** 创建 / 导入场景下 XML 和 Markdown 都可以——用户提供 `.md` 本地文件、或明确说"导入 Markdown"时,直接用 Markdown;没有明确指示时默认 XML(表达能力更强,可承载更丰富的结构化内容)。不要在用户没要求的情况下主动从 XML 切到 Markdown,也不要在用户已给出 Markdown 时强行改成 XML。 ## 命令 @@ -72,8 +72,8 @@ lark-cli docs +create --doc-format markdown --title "项目计划" --content $'# ## 参考 -- [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) — 从零创作工作流(Code-Act Loop、并行执行策略) -- [`lark-doc-style.md`](style/lark-doc-style.md) — 文档样式指南(元素选择 + 丰富度规则 + 颜色语义) +- [`lark-doc-create-workflow.md`](style/lark-doc-create-workflow.md) — 从零创作工作流(Code-Act Loop、单 Agent 串行撰写) +- [`lark-doc-style.md`](style/lark-doc-style.md) — 文档写作原则(默认段落、按体裁、组件克制) - [`lark-doc-xml.md`](lark-doc-xml.md) — XML 语法规范 - [`lark-doc-fetch.md`](lark-doc-fetch.md) — 获取文档 - [`lark-doc-update.md`](lark-doc-update.md) — 更新文档 diff --git a/skills/lark-doc/references/lark-doc-history.md b/skills/lark-doc/references/lark-doc-history.md new file mode 100644 index 000000000..a4a7235be --- /dev/null +++ b/skills/lark-doc/references/lark-doc-history.md @@ -0,0 +1,107 @@ +# docs history(历史版本与回滚) + +用于查看 Docx 历史版本、按 `history_version_id` 回滚,以及查询回滚任务状态。 + +## 安全流程 + +1. 先用分页接口 `+history-list` 找到目标版本的 `history_version_id`。 +2. 如果用户指定的是 `revision_id`,不要假设它唯一,也不要把 `revision_id` 直接传给 `+history-revert`。先拉一页并在 `entries[]` 中筛选 `revision_id` 相同的候选;如果未匹配到且 `has_more=true`,继续用 `page_token` 翻页;如果已匹配到候选,最多额外再拉一页补齐可能跨页的相邻候选。最终优先根据用户目标时间与 `edit_time` 的接近程度选择最合适的一条,取同一条的 `history_version_id`;如果没有目标时间,或多个候选无法可靠区分,再向用户展示候选版本(`history_version_id`、`revision_id`、`edit_time`、`name/description`)并确认后回滚。 +3. 如果用户指定的是某一时刻但没有指定 `revision_id`,按 `entries[].edit_time` 匹配;优先选择不晚于目标时刻的最近一条历史记录,无法明确匹配时先向用户确认候选版本。 +4. 再用 `+history-revert --history-version-id <history_version_id>` 发起回滚。默认最多等待 30 秒;如果返回 `status: running`,记录 `task_id`。 +5. 用 `+history-revert-status` 轮询 `task_id`,直到状态不再是 `running`。 +6. 回滚完成后,用 `docs +fetch` 读取文档确认内容。 + +## 按 revision_id 或时间点回滚 + +当用户说“回滚到 revision_id=42”“恢复到昨天下午 3 点的版本”这类需求时,流程是: + +1. 执行 `docs +history-list --doc <doc>` 获取第一页历史记录;`+history-list` 是分页接口,只有 `has_more=true` 且还需要更多候选时才继续传 `--page-token` 翻页。 +2. 如果用户给出 `revision_id`:先筛选当前页中 `entries[].revision_id == 用户给出的 revision_id`。如果未命中且 `has_more=true`,继续拉下一页;如果已经命中候选,最多额外再拉一页,补齐同一个 `revision_id` 可能跨页出现的相邻 `history_version_id`。若用户同时给出目标时间,在候选里选择 `edit_time` 与目标时间最接近的一条;若未给目标时间但候选只有一条,可直接使用;若多个候选无法可靠区分,不要自行取第一条,向用户展示候选并确认。 +3. 如果用户只给出时间:用 `entries[].edit_time` 匹配,选择目标时刻之前最近的一条;如果用户表达的是“最接近某时刻”,则选择绝对时间差最小的一条。 +4. 从最终匹配条目读取 `history_version_id`。`history_version_id` 对应服务端 `minor_history.version`,这是回滚接口需要的 ID。 +5. 执行 `docs +history-revert --doc <doc> --history-version-id <history_version_id>`。 + +候选确认时使用类似格式: + +```text +同一个 revision_id 命中多个历史版本,请确认要回滚哪一条: +- history_version_id=11 revision_id=42 edit_time=2026-06-22T12:24:45Z name=... +- history_version_id=12 revision_id=42 edit_time=2026-06-22T12:25:14Z name=... +``` + +## 命令 + +```bash +# 列出历史版本 +lark-cli docs +history-list --doc "<docx_url_or_token>" --page-size 20 + +# 翻页 +lark-cli docs +history-list --doc "<docx_url_or_token>" --page-size 20 --page-token "<page_token>" + +# 回滚到指定 history_version_id(默认等待 30000ms) +lark-cli docs +history-revert --doc "<docx_url_or_token>" --history-version-id 42 + +# 只发起任务,不等待 +lark-cli docs +history-revert --doc "<docx_url_or_token>" --history-version-id 42 --wait-timeout-ms 0 + +# 查询回滚任务状态 +lark-cli docs +history-revert-status --doc "<docx_url_or_token>" --task-id "<task_id>" +``` + +## 参数 + +| 命令 | 参数 | 必填 | 说明 | +|-|-|-|-| +| `+history-list` | `--doc` | 是 | Docx URL/token,或可解析为 Docx 的 wiki URL | +| `+history-list` | `--page-size` | 否 | 返回条数,范围 `1-20`,默认 `20` | +| `+history-list` | `--page-token` | 否 | 上一页返回的 `page_token` | +| `+history-revert` | `--doc` | 是 | Docx URL/token,或可解析为 Docx 的 wiki URL | +| `+history-revert` | `--history-version-id` | 是 | `+history-list` 返回的 `history_version_id`,必须大于 0 | +| `+history-revert` | `--wait-timeout-ms` | 否 | 等待回滚完成的毫秒数,范围 `0-30000`,默认 `30000` | +| `+history-revert-status` | `--doc` | 是 | 同一个文档 | +| `+history-revert-status` | `--task-id` | 是 | `+history-revert` 返回的 `task_id` | + +## 返回值要点 + +`+history-list` 返回: + +```json +{ + "entries": [ + { + "revision_id": 42, + "history_version_id": "11", + "edit_time": "1780000000", + "type": 1, + "name": "版本名", + "description": "版本说明", + "editor_ids": ["ou_xxx"] + } + ], + "has_more": true, + "page_token": "page_token" +} +``` + +`+history-revert` 返回: + +```json +{ + "task_id": "task_xxx", + "status": "running", + "history_version_id": "11", + "poll_after_ms": 10000 +} +``` + +`+history-revert-status` 返回: + +```json +{ + "status": "partial_failed", + "history_version_id": "11", + "failed_block_tokens": ["blk_xxx"] +} +``` + +`status` 可能是 `running`、`done`、`partial_failed`、`failed`。当状态是 `partial_failed` 或 `failed` 时,优先检查 `failed_block_tokens`。 diff --git a/skills/lark-doc/references/lark-doc-mindnote.md b/skills/lark-doc/references/lark-doc-mindnote.md new file mode 100644 index 000000000..7974c165a --- /dev/null +++ b/skills/lark-doc/references/lark-doc-mindnote.md @@ -0,0 +1,113 @@ +# 飞书思维笔记(Mindnote) + +> **前置条件:** 先阅读 [`../SKILL.md`](../SKILL.md) 和 [`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和路由规则。 + +当用户要操作思维笔记时,入口属于 `lark-doc`,但实际执行命令使用 `lark-cli mindnotes nodes list/create`,不是 `docs +...`。 + +> [!IMPORTANT] +> 当前这条链路只支持**读取已有思维笔记**,以及在**已有思维笔记**里读取节点、创建子节点。 +> `mindnotes nodes create` 是新增/更新节点命令,**不是**新建一个新的思维笔记。 +> 如果用户要**新建思维笔记**,不要走本链路,改走 [lark-doc-whiteboard](lark-doc-whiteboard.md)。 + +## 命令 + +```bash +# 先看命令帮助 +lark-cli mindnotes nodes list --help +lark-cli mindnotes nodes create --help + +# 读取节点列表 +lark-cli mindnotes nodes list --mindnote-id "<mindnote_token>" + +# 创建子节点 +lark-cli mindnotes nodes create \ + --mindnote-id "<mindnote_token>" \ + --data '{"client_token":"<client_token>","nodes":[{"parent_id":"node_parent123","texts":[{"element_type":"text","text":{"content":"子节点内容"}}],"highlight":"yellow","finish":false}]}' + +# 更新已有节点 +lark-cli mindnotes nodes create \ + --mindnote-id "<mindnote_token>" \ + --data '{"client_token":"<client_token>","nodes":[{"node_id":"node_existing123","texts":[{"element_type":"text","text":{"content":"更新后的节点内容"}}],"highlight":"blue","finish":true}]}' +``` + +## 参数 + +### `mindnotes nodes list` + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--mindnote-id` | 是 | 思维笔记 token / 唯一标识 | + +返回重点:`data.nodes` 中常见字段有 `node_id`、`parent_id`、`texts`、`notes`、`images`、`finish`、`highlight`。 + +### `mindnotes nodes create` + +命令参数: + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--mindnote-id` | 是 | 思维笔记 token / 唯一标识 | +| `--data` | 是 | JSON 请求体 | + +请求体字段: + +| 字段 | 必填 | 说明 | +|------|------|------| +| `client_token` | 否 | 幂等 token,建议写操作传入;推荐使用时间戳或 UUID | +| `nodes` | 是 | 待创建或更新的节点数组 | +| `nodes[].node_id` | 否 | 节点 ID;传入已有 `node_id` 时表示更新对应节点 | +| `nodes[].parent_id` | 否 | 父节点 ID;创建子节点时传入 | +| `nodes[].texts` | 否 | 节点正文富文本数组 | +| `nodes[].notes` | 否 | 节点备注富文本数组 | +| `nodes[].images` | 否 | 节点图片列表 | +| `nodes[].highlight` | 否 | `red` / `yellow` / `pink` / `blue` / `cyan` / `olive` / `grey` | +| `nodes[].finish` | 否 | 节点完成状态 | + +富文本字段 `texts` / `notes` 是元素数组。最常见的是: + +```json +[{"element_type":"text","text":{"content":"节点内容"}}] +``` + +### 节点图片(`nodes[].images`) + +`nodes[].images` 接收的是**图片 token**,不是本地文件路径,也不是 URL。 + +```bash +# 先上传图片,拿到 token +lark-cli docs +media-upload --file ./image.png --parent-type mindnote_image --parent-node <mindnote_token> + +# 再把 token 写进节点 +lark-cli mindnotes nodes create \ + --mindnote-id "<mindnote_token>" \ + --data '{"client_token":"<client_token>","nodes":[{"node_id":"node_existing123","images":[{"token":"canonical_token"}]}]}' +``` + +参数说明: + +| 参数 | 必填 | 说明 | +|------|------|------| +| `--file` | 是 | 本地图片路径 | +| `--parent-type` | 是 | 上传目标类型;图片使用 `mindnote_image` | +| `--parent-node` | 是 | 传 Mindnote 的 token | +| `nodes[].images[].token` | 是 | 上传后返回的图片 token | + +## 推荐工作流 + +1. 先判断用户目标是不是“新建一个思维笔记”。 +2. 如果是新建思维笔记,切到 [lark-doc-whiteboard](lark-doc-whiteboard.md)。 +3. 如果是操作已有思维笔记,先通过 token 类别判断。 +4. 确认是 **Mindnote** 后再拿到 `mindnote_id`。 +5. 先执行 `mindnotes nodes list`,确认目标 `parent_id`。 +6. 新增子节点时,在 `nodes[]` 里传 `parent_id`;更新已有节点时,在 `nodes[]` 里传已有 `node_id`。 +7. 再执行 `mindnotes nodes create`。 +8. 写操作优先带 `client_token`,推荐使用时间戳或 UUID,避免重试时重复创建或重复更新。 + +> [!CAUTION] +> `mindnotes nodes create` 是写操作。创建时确认插入位置,更新时确认 `node_id` 指向的就是目标节点。 + +## 参考 + +- [lark-doc-fetch](lark-doc-fetch.md) — 获取文档内容 +- [lark-doc-whiteboard](lark-doc-whiteboard.md) — 新建思维笔记走画板链路 +- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/lark-doc/references/lark-doc-update.md b/skills/lark-doc/references/lark-doc-update.md index 43beb7f56..905d69175 100644 --- a/skills/lark-doc/references/lark-doc-update.md +++ b/skills/lark-doc/references/lark-doc-update.md @@ -3,8 +3,8 @@ > **前置条件(MUST READ):** 生成文档内容前,必须先用 Read 工具读取以下文件,缺一不可: > 1. [`lark-doc-xml.md`](lark-doc-xml.md) — XML 语法规则(使用 Markdown 格式时改读 [`lark-doc-md.md`](lark-doc-md.md)) -> 2. [`lark-doc-style.md`](style/lark-doc-style.md) — 排版指南(元素选择、丰富度规则、颜色语义) -> 3. [`lark-doc-update-workflow.md`](style/lark-doc-update-workflow.md) — 改写增强工作流(Code-Act Loop、并行执行策略) +> 2. [`lark-doc-style.md`](style/lark-doc-style.md) — 写作原则(默认段落、按体裁、组件克制) +> 3. [`lark-doc-update-workflow.md`](style/lark-doc-update-workflow.md) — 改写增强工作流(Code-Act Loop、单 Agent 串行改写) > > **未读完以上文件就生成内容会导致格式错误。** @@ -232,7 +232,7 @@ lark-cli docs +update --doc "<doc_id>" --command str_replace \ > **`docs +update` 不能直接编辑已有画板的内容。** 本命令只能**新增**画板块;要修改已有画板,先用 `docs +fetch` 取到 `<whiteboard token="...">`,再按 [`lark-doc-whiteboard.md`](lark-doc-whiteboard.md) 启动 SubAgent 读取 [`lark-whiteboard`](../../lark-whiteboard/SKILL.md) 并写入。 -画板的语法选型与插入示例见 [`lark-doc-style.md`](style/lark-doc-style.md) 的「画板语法与插入」章节。 +画板的语法选型与插入示例见 [`lark-doc-xml.md`](lark-doc-xml.md) 与 [`lark-doc-whiteboard.md`](lark-doc-whiteboard.md)。 ## 最佳实践 @@ -252,8 +252,8 @@ lark-cli docs +update --doc "<doc_id>" --command str_replace \ ## 参考 -- [`lark-doc-update-workflow.md`](style/lark-doc-update-workflow.md) — 改写增强工作流(Code-Act Loop、并行执行策略) -- [`lark-doc-style.md`](style/lark-doc-style.md) — 文档样式指南(元素选择 + 丰富度规则 + 颜色语义) +- [`lark-doc-update-workflow.md`](style/lark-doc-update-workflow.md) — 改写增强工作流(Code-Act Loop、单 Agent 串行改写) +- [`lark-doc-style.md`](style/lark-doc-style.md) — 文档写作原则(默认段落、按体裁、组件克制) - [`lark-doc-xml.md`](lark-doc-xml.md) — XML 语法规范 - [`lark-doc-fetch.md`](lark-doc-fetch.md) — 获取文档 - [`lark-doc-create.md`](lark-doc-create.md) — 创建文档 diff --git a/skills/lark-doc/references/lark-doc-whiteboard.md b/skills/lark-doc/references/lark-doc-whiteboard.md index 6d16b74ac..90393571d 100644 --- a/skills/lark-doc/references/lark-doc-whiteboard.md +++ b/skills/lark-doc/references/lark-doc-whiteboard.md @@ -44,6 +44,8 @@ SubAgent 插入 SVG。 </whiteboard> ``` +如果 Mermaid 已在本地文件中,可写成 `<whiteboard type="mermaid" path="@diagram.mmd"></whiteboard>`;CLI 会在写入前读取文件并展开为内联内容。 + ### 步骤 2B: SubAgent 使用 SVG 插入图表 主 Agent 启动 SubAgent,让它用 `docs +create` / `docs +update` 插入: @@ -56,6 +58,8 @@ SubAgent 插入 SVG。 </whiteboard> ``` +如果 SVG 已在本地文件中,可写成 `<whiteboard type="svg" path="@diagram.svg"></whiteboard>`;PlantUML 文件同理使用 `<whiteboard type="plantuml" path="@sequence.puml"></whiteboard>`。 + Sub Agent 需要携带以下的最小上下文,以及后续的 [SVG 设计 Workflow] 章节指南: - doc token、插入位置(标题 / block_id / command) diff --git a/skills/lark-doc/references/lark-doc-word-stat.md b/skills/lark-doc/references/lark-doc-word-stat.md index b20b74ced..156b85912 100644 --- a/skills/lark-doc/references/lark-doc-word-stat.md +++ b/skills/lark-doc/references/lark-doc-word-stat.md @@ -13,6 +13,13 @@ lark-cli docs +fetch --doc "$URL" --doc-format xml --detail full --format json \ `$URL` 可以是用户给出的 docx/wiki URL,也可以是可被 `docs +fetch` 解析的 token。 +## 统计范围 + +先判断用户要求的是**整篇文档**还是**局部内容**: + +- 整篇文档的总字数 / 总字符数:按上方「调用方式」抓取 `full` 内容后统计。 +- 本次新增 / 替换 / 改写片段的字数:优先统计拟写内容本身;内容已写入文档时,只 fetch 对应 block / range 后统计。不得用整篇文档字数对比局部目标。 + 如需在自动化或回归验证中发现未覆盖块类型,追加严格参数: ```bash @@ -36,6 +43,15 @@ lark-cli docs +fetch --doc "$URL" --doc-format xml --detail full --format json \ 如果 `unknown_blocks` 或 `unsupported_blocks` 非空,回复用户时要说明“已统计可提取文本,但存在未覆盖块,结果可能偏低”,并列出对应块类型。为空时可直接给出结果。 +## 字数遵循校验 + +当用户给了明确字数要求(写 N 字 / x-y 字 / x 字左右 / 上下浮动)时执行;没有明确字数要求则跳过。字数必须按本文流程用脚本统计,不要自己估。 + +1. 先按「统计范围」确认统计对象,再把要求归一成目标区间:`>x`→`[x+1, +∞)`;`<y`→`(-∞, y-1]`;`x-y`→`[x, y]`;`x 字左右`→`[round(0.9x), round(1.1x)]` +2. 按统计对象选择对应输入并调用脚本统计实际字数,读取输出里的 `word_count` +3. 对比 `word_count` 与目标区间:区间内即通过;低于下限 → 补充**实质内容**(非注水);高于上限 → 删减冗余内容。改完重新统计 +4. **最多 2 轮**。2 轮后仍不达标:停止,不得为达标而注水或删关键内容;如实汇报【目标区间 / 当前字数 / 差值与方向 / 已试 2 轮 / 未达原因】,**禁止谎称达标** + ## 输出示例 输入正文等价于:`标题` + `一个苹果是 an apple。` 时,输出形态如下: diff --git a/skills/lark-doc/references/lark-doc-xml.md b/skills/lark-doc/references/lark-doc-xml.md index 7484f428d..e8e07a99b 100644 --- a/skills/lark-doc/references/lark-doc-xml.md +++ b/skills/lark-doc/references/lark-doc-xml.md @@ -41,7 +41,7 @@ p, h1-h9, ul, ol, li, table, thead, tbody, tr, th, td, blockquote, pre, code, hr 文档中可嵌入外部资源块(属于容器标签的特殊形式),需要额外语法创建: - `<img>` — `<img href="https://..."/>` 上传网络图片 -- `<whiteboard>` — 简单图由 SubAgent 直接插入 `<whiteboard type="svg">完整自包含 SVG</whiteboard>`;复杂图使用 `<whiteboard type="blank"></whiteboard>` 先创建空白画板,再按 [`lark-doc-whiteboard.md`](lark-doc-whiteboard.md) 启动 SubAgent 调用 `lark-whiteboard` 写入; +- `<whiteboard>` — 简单图由 SubAgent 直接插入 `<whiteboard type="svg">完整自包含 SVG</whiteboard>`;也可用本地文件简写 `<whiteboard type="svg" path="@diagram.svg"></whiteboard>`、`<whiteboard type="mermaid" path="@flow.mmd"></whiteboard>`、`<whiteboard type="plantuml" path="@sequence.puml"></whiteboard>`,CLI 会写入前展开为内联内容;复杂图使用 `<whiteboard type="blank"></whiteboard>` 先创建空白画板,再按 [`lark-doc-whiteboard.md`](lark-doc-whiteboard.md) 启动 SubAgent 调用 `lark-whiteboard` 写入; - `<sheet>` — `<sheet type="blank"></sheet>` 空白;`<sheet sheet-id="SID" token="TOKEN"></sheet>` 复制已有 - `<task>` — `<task task-id="GUID"></task>`,必传 task-id(任务 guid) - `<chat_card>` — `<chat_card chat-id="CHAT_ID"></chat_card>`,必传 chat-id diff --git a/skills/lark-doc/references/style/lark-doc-create-workflow.md b/skills/lark-doc/references/style/lark-doc-create-workflow.md index d845e91c0..a9ab5c3b1 100644 --- a/skills/lark-doc/references/style/lark-doc-create-workflow.md +++ b/skills/lark-doc/references/style/lark-doc-create-workflow.md @@ -7,7 +7,7 @@ 通过自适应的 **Code-Act Loop** 驱动文档创作,而非固定模板式的工作流。每次任务都循环执行: 1. **Plan(规划)** — 根据用户目标和文档当前状态,评估下一步该做什么 -2. **Execute(执行)** — 运行相应的 `lark-cli docs` 命令,或 **spawn** Agent 子任务并行推进 +2. **Execute(执行)** — 由主 Agent 自己运行 `lark-cli docs` 命令推进正文;仅画板渲染按需隔离到 SubAgent(见步骤三) 3. **Observe(观察)** — 检查命令输出,验证正确性,确认内容是否满足用户目标 4. **Iterate(迭代)** — 如需调整,回到 Plan 继续循环 @@ -16,44 +16,32 @@ ## 典型 Code-Act Loop 流程 -### 步骤一:规划与初始创建(串行) +### 步骤一:规划与撰写(单 Agent 串行) + +正文由主 Agent 串行维护,**不按章节拆给并行 Agent**,避免上下文割裂、重复矛盾和全文级约束失效。 1. 分析用户需求:受众、目的、范围 2. 设计大纲:根据任务自然选择结构。可以是短文、纪要、FAQ、方案、报告、清单或其他形式;不要默认套固定章节、固定开头或固定富 block 配比 -3. `docs +create` 创建文档。长文档可**只建骨架**:标题 + 各级标题 + 每节一句占位摘要;短文档可以一次写入完整内容 - - ⚠️ 创建较长文档时,**不要**一次性把完整章节内容塞进 `--content`。超长 `--content` 容易触发字符/参数限制。 - - 完整内容留到步骤二,由各 Agent 用 `block_insert_after --block-id <章节标题 block_id>` 分段写入。 - - ⚠️ **`@file` 路径限制**:`--content @file` 只接受当前工作目录下的相对路径,传绝对路径(如 `@/tmp/xxx.md`)会报 `unsafe file path`。需要落盘时,将文件写在 cwd 下,用完自行清理。 +3. `docs +create` 创建并撰写: + - **短文档**:一次写入完整内容。使用 Markdown 时,避免同时传入 `--title` 和同名 `# 标题` + - **长文档**:先建骨架(标题 + 各级标题),再由主 Agent **顺序逐节**用 `block_insert_after --block-id <章节标题 block_id>` 补全正文;写完一节再写下一节,始终带着已写内容的上下文,保证衔接、不重复 + - ⚠️ 不要一次性把超长完整内容塞进 `--content`,容易触发字符/参数限制;长文按节分次写入 + - ⚠️ 同一节内多次插入时,要锚到**上一个新插入的 block**(按 [`lark-doc-update.md`](../lark-doc-update.md) 的「Block ID 生命周期」),否则反复锚同一个标题会让段落顺序颠倒 + - ⚠️ 若先建骨架写了占位摘要,补正文时**删除占位摘要**,不要留残渣 + - ⚠️ **`@file` 路径限制**:`--content @file` 只接受当前工作目录下的相对路径,传绝对路径(如 `@/tmp/xxx.md`)会报 `unsafe file path`。需要落盘时,将文件写在 cwd 下,用完自行清理 -### 步骤二:分段撰写(并行 Agent) +### 步骤二:整合审查与画板识别(串行) -4. Spawn Agent 并行撰写各章节。每个 Agent 需收到: - - 文档 token、负责的章节范围、用户目标、目标读者和已有风格线索 - - `lark-doc-xml.md` 和 `lark-doc-style.md` 的完整路径(Agent 须先读取) - - 使用 `block_insert_after --block-id <章节标题 block_id>` 写入对应章节内容 +4. `docs +fetch --api-version v2 --detail with-ids` 获取文档,审查整体效果 +5. 评估内容是否满足用户目标:事实是否完整、结构是否清楚、语气是否匹配、是否保留必要素材;检查跨节有无重复、矛盾或断流。再按 `lark-doc-style.md` 的「写完自检」快速核对,发现问题就地定向修正 +6. **画板识别**:逐章节扫描,判断是否有段落用图明显比文字更易懂(流程 / 架构 / 时间线 / 对比 / 占比等,见 `lark-doc-style.md` 的画板原则)。默认用文字,只有确需图示才记录需要插图的章节、推荐画板类型、mermaid/SVG 路径和用于画图的源内容 -### 步骤三:整合审查与画板识别(串行) +### 步骤三:画板处理与润色 -5. `docs +fetch --detail with-ids` 获取文档,审查整体效果 -6. 评估内容是否满足用户目标:事实是否完整、结构是否清楚、语气是否匹配、是否保留必要素材 -7. **画板意图识别**:逐章节扫描,按 `lark-doc-style.md`「画板意图识别」表判断是否有段落适合用图表达。重要信息优先画板化,记录需要插图的章节、推荐画板类型、mermaid/SVG 路径和用于画图的源内容 +7. **优先处理步骤二识别出的画板需求**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent +8. 由**主 Agent 自行润色**(不另起内容子 Agent,正文始终一人维护):文字密集且不易读时,优先拆段、加小标题或调整顺序——叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`);只有确实存在行列数据时才用 `<table>`。其余富 block 的取舍一律遵循 `lark-doc-style.md` 的写作原则,不主动堆叠。需要明显分隔的主题可补充 `<hr/>`,不强制章节间都使用。本地图片使用 `docs +media-insert` 插入 -### 步骤四:画板处理与润色(并行 Agent) +### 步骤四:专项校验 -8. **优先处理步骤三识别出的画板需求**: - 参考 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md)中的方式,插入图表画板。 -9. Spawn 内容改写 Agent 定向润色: - - 文字密集且不易读时,优先拆段、改列表、增加小标题或调整顺序;只有确实存在行列数据、并列对比或强提醒信息时,才考虑 `<table>` / `<grid>` / `<callout>` - - 需要明显分隔的主题可补充 `<hr/>`,不强制章节间都使用 - - 本地图片使用 `docs +media-insert` 插入 - - -## Agent 子任务要求 - -内容改写 Agent 必须收到:文档 token、章节范围(标题/block ID)、`lark-doc-xml.md` 和 `lark-doc-style.md` 路径、用户目标/风格要求、具体的 `docs +update` command 和 `--block-id`。 - -Mermaid 图由主 Agent 直接插入 `<whiteboard type="mermaid">...</whiteboard>`,无需 SubAgent。 - -SVG SubAgent 必须收到:文档 token、插入位置(标题/block ID)、图表目标、源内容片段、`lark-doc-xml.md` 路径,以及[lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 中的 "SVG 设计 Workflow" 指南。它只负责插入一个 `<whiteboard type="svg">...</whiteboard>`,不改其他正文,也不读取 `lark-whiteboard`。 - -已有画板更新 SubAgent 必须收到:board_token、图表目标、推荐画板类型、源内容片段、[`../../../lark-whiteboard/SKILL.md`](../../../lark-whiteboard/SKILL.md) 路径。它只负责写入画板,不改文档正文。 +9. **字数门禁**:如果用户给出任何明确字数要求(如“700-800 字”“1000 字左右”“不少于 500 字”“控制在 800 字以内”),本步骤必须执行,不属于按需项。读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;未得到脚本统计结果前,不得向用户声明“符合字数要求”。若没有明确字数要求,则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现目标区间、`word_count` 和达标结论 +10. **重复标题检查**:文档生成后,检查文档标题和正文第一个标题块是否重复;若重复,删除或改写正文第一个标题块,避免读者看到同一标题连续出现 diff --git a/skills/lark-doc/references/style/lark-doc-style.md b/skills/lark-doc/references/style/lark-doc-style.md index 1a09a80f4..71ba1bd97 100644 --- a/skills/lark-doc/references/style/lark-doc-style.md +++ b/skills/lark-doc/references/style/lark-doc-style.md @@ -1,86 +1,68 @@ -# 文档表达组件参考 +# 飞书文档写作原则 -本文件说明飞书文档可用的结构化表达方式,供模型在需要时选择。它不是固定模板,也不是强制排版规范。 +写飞书文档,像一个该领域资深的人类作者那样写,而不是把内容"装配"成组件。 +本文只讲"何时用、什么风格";具体标签 / 命令语法见 [`lark-doc-xml.md`](../lark-doc-xml.md)。 -默认原则:优先理解用户目标、受众、素材形态和已有文档风格,由模型自主决定结构、语气和视觉呈现。只有当用户明确要求“美化、重排版、做成报告/方案/看起来更专业”等,或内容本身明显需要结构化承载时,才主动使用下列组件。 +## 一、用户明确要求优先 -## 一、核心原则 +用户点名要某种格式——高亮块、分栏、列表、某编号体例、表格、画板、某模板、某已有文档的风格——**一律照用户的来,下面的"默认克制"全部让位**。用户给了样例或已有文档,就沿用它的结构与语气。 -1. **服务内容,而非套模板**:先判断信息最自然的表达方式,再选择段落、列表、表格、分栏、画板等元素 -2. **尊重用户风格**:用户给出样例、语气、结构或已有文档时,优先沿用;没有要求时不强行使用固定开头、固定章节或固定视觉组件 -3. **适度结构化**:结构化 block 用于降低理解成本,不为了“丰富”而堆叠 -4. **保持一致但不过度统一**:同类信息可使用相近表达,但允许因内容差异采用不同形式 -5. **图示服务理解**:流程、架构、对比、风险、路线图、指标趋势等内容在图示明显降低理解成本时,可使用画板表达 +## 二、默认写连贯段落 -## 二、元素选择指南 +用户没指定时,**默认是连贯段落**;其余按内容类型分流,别一律"少用结构",也别什么都升标题: -需要图表时,按类型选择插入方式:思维导图/时序图/类图/饼图/甘特图可用 `<whiteboard type="mermaid">` 直接内嵌;其他新图表可启动 SubAgent 插入 `<whiteboard type="svg">完整 SVG</whiteboard>`;只有编辑**已有**画板时才调用 **lark-whiteboard** skill。 +| 内容 | 用什么 | ❌ 别 | +|---|---|---| +| 叙述、论证、分析、说明 | **连贯段落** | 拆成列举 | +| 真·行列数据(预算、指标、对比、排期、字段说明) | **表格** | 写成段落或把字段堆成一行 | +| 字段:值(主题、时长、负责人等,少量) | **加粗标签行**或一句话 | 每字段一个标题 | +| 方法 / 措施 + 每项一段描述 | **加粗引导句段落**(「**全程督导。**…」) | 每项升标题 | +| 任务清单 / 检查项 / 待办事项 | **`<checkbox>`** | 用普通列表替代可交互待办 | +| 纯短并列项(无描述,如材料清单) | 列表 | — | +| 章节(内容成块、需在目录导航) | 标题层级 | — | -| 场景 | 可选表达方式 | -|--------------------------------------------|---------------------------------------| -| 少数需要视觉提醒的短句,如风险、限制、待确认事项或关键提醒 | 需要视觉提醒时可用 `<callout>`;普通结论、摘要或章节导语优先使用段落、列表、小标题或加粗 | -| 方案对比 / 优劣势 / Before vs After | 简短对比可用段落、列表或 `<grid>`;维度较多且需要逐项比较时再考虑 `<table>` 或画板 | -| 简短低风险对比 | `<grid>` 2 列分栏 | -| 需要按行列精确比较或查阅的数据,如指标、清单、字段说明、排期 | 可用 `<table>`;短要点、步骤、摘要或普通说明优先使用段落、列表或小标题 | -| 任务清单 / 检查项 | `<checkbox>` | -| 代码片段 | `<pre lang="x" caption="说明">` | -| 引用 / 公式 | `<blockquote>` / `<latex>` | -| 操作入口 / 跳转链接 | `<button>` / `<a type="url-preview">` | -| 流程图 / 时间线 / 示意图 / 自定义图形 / 架构图 / 数据图 / 思维导图等 | 画板图表 | +- 判断标准:**去掉结构后能顺成段落,就用段落;成行成列的数据,就用表格。** +- **红线一:标题层级只给"章节"。** "小标题 + 一两句话"的小项(字段、方法、要点)不该占标题层级——按上表降成标签行 / 加粗引导句段落(否则目录里全是没信息量的条目)。 +- **红线二:列举(「一是 / 二是」「第一 / 第二」「(1)(2)(3)」)只给真正并列的具体项,且别每节都用。** + - 「一是 / 二是」是党务列举的措辞——只用在列具体的**问题 / 措施**那一处;背景、现状、认识、分析、过渡、总结**一律成段**。 + - **整篇每段 / 每节都"一是 / 二是",和"每段一个 bullet"是同一个骨架化的错——不因为是党务就变对**(纯清单 / 台账类除外)。 +## 三、按体裁写 -### 画板意图识别 +- **公文 / 法律 / 学术 / 申报 / 项目方案等严肃正式提交物**:靠规范的标题层级、段落与编号体系表达;**默认不用高亮块、分栏**,要强调用加粗或规范小标题。 +- **面向公众号、微信等外部平台粘贴 / 发布的内容**:不用飞书特有富 block(高亮块、分栏等),粘出去会丢样式 / 错乱;改用标准标题、段落、列表、引用。 +- **一般文档**:以可读为先,不堆砌结构。 -撰写或审查每个段落/章节时,**必须判断该内容是否适合用图表达**。满足以下任一特征时,应使用画板而非纯文本;如果该内容承载章节核心结论、关键决策或主要论据,即使结构较简单也优先画板化: +## 四、编号与层级 -| 内容特征 | 信号词 / 模式 | 推荐画板类型 | +- **一套编号体例、全篇一致;最忌中文大层级与阿拉伯小数编号混用。** + - 公文 / 正式材料常用:「一、→(一)→ 1.→(1)」(中文大层级 + 阿拉伯细分层级)。 + - 学术 / 技术 / 商业报告:「1 → 1.1 → 1.1.1」或「一、→(一)→ 1.」,**择一**。 + - ⚠️ **「一、」只能配「(一)」;要用阿拉伯小数就从顶层全用「1 / 1.1」。绝不「一、」配「1.1 / 2.1」**——这是最常见的混用。 + - **不混用**多套(别"第X部分"+"一、"+"1."混着来);**同级不跳号**;**不跳级**。 +- **编号 / 标题层级只给"章节"**,不要为了凑齐体例把每个小项都编上「(一)」、升成标题(小项处理方式见上文「二、默认写连贯段落」)。 +- 简单的 1.2.3 并列项用原生 `<ol><li seq="auto">…</li></ol>` 让飞书自动编号、自动对齐;「一、(一)」原生产不出,才手打成文字——此时用标题级别表达层次,**不靠手动缩进**、各级顶格(全角括号「()」叠手动缩进会视觉错位)。 + +## 五、飞书特有组件,克制使用 + +- **高亮块 `<callout>`**:很重的强提醒信号,**默认不用**;只给"不提醒就会出错 / 遗漏"的关键项,全文极少(0~1 个),不要每节导语 / 结论都做成高亮块。 +- **分栏 `<grid>`**:仅左右信息量相当、确需并排对照的短内容;否则用段落或表格。 +- **画板**:默认用文字,只在**图示明显比文字更易懂**(流程、架构、时间线、对比、占比等)或用户要求时才用。怎么插、用哪种类型见 [`lark-doc-xml.md`](../lark-doc-xml.md) 与 [`lark-doc-whiteboard.md`](../lark-doc-whiteboard.md)。 +- **颜色**:默认朴素、不上色;需要时保持语义一致,按下表选择对应颜色,不为装饰上色。可用色见 [`lark-doc-xml.md`](../lark-doc-xml.md) 的「美化系统」。 + +| 语义 | 背景色 | 文字色 | |-|-|-| -| 多步骤的操作流程或决策路径 | "先…然后…最后"、"步骤 1/2/3"、"如果…则…否则" | 流程图 / 泳道图 | -| 系统或模块间的依赖与交互 | "调用"、"依赖"、"上游/下游"、"请求→响应" | 架构图 | -| 上下级或从属关系 | "汇报给"、"下属"、"隶属"、"团队结构" | 组织架构图 | -| 时间线或阶段演进 | "Q1/Q2"、"里程碑"、"阶段一→阶段二"、日期序列 | 时间线 / 里程碑 | -| 因果分析或问题归因 | "根因"、"原因"、"导致"、"影响因素" | 鱼骨图 | -| 两个及以上方案/对象的多维度对比 | "vs"、"方案 A/B"、"优劣"、"对比" | 对比图 | -| 层级递进或优先级排序 | "基础→进阶→高级"、"L1/L2/L3"、"核心→外围" | 金字塔图 | -| 数值趋势或周期变化 | 带数字的时间序列、"增长/下降"、百分比变化 | 折线图 / 柱状图 | -| 漏斗或转化率 | "转化率"、"漏斗"、"从…到…留存" | 漏斗图 | -| 发散或归纳的思维结构 | "要点"、"维度"、"分支"、多层嵌套列表 | 思维导图 | -| 循环或飞轮效应 | "正循环"、"飞轮"、"闭环"、"A 驱动 B 驱动 C" | 飞轮图 | -| 占比分布 | "占比"、"份额"、"分布"、百分比加总 ≈100% | 饼图 / 树状图 | +| 信息、说明 | `light-blue` | `blue` | +| 成功、推荐 | `light-green` | `green` | +| 警告 / 错误 / 风险 | `light-red` | `red` | +| 注意、待确认 | `light-yellow` | `yellow` | +| 中性、辅助 | `light-gray` | — | -**判断规则:** -- 重要信息能图示就图示;不要为了省步骤把关键流程、架构、对比、风险链路写成纯文本 -- 低重要度、局部辅助信息才用 `<table>` / `<grid>` / `<callout>` 承载 -- 确定需要插入哪些图表后,参照 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 中的方式,插入图表画板。 +## 六、写完自检 -## 三、颜色语义 - -如果使用颜色,建议保持语义一致;不需要颜色时可以保持朴素文本风格: - -| 语义 | emoji 前缀 | callout 背景色 | 文字色 | -|-|-|-|-| -| 信息、说明 | ℹ️ "说明:" | `light-blue` | `blue` | -| 成功、推荐 | ✅ "推荐:" | `light-green` | `green` | -| 警告 / 错误 / 风险 | ⚠️❌ | `light-red` | `red` | -| 注意、待确认 | ❗"注意:" | `light-yellow` | `yellow` | -| 中性、辅助 | — | `light-gray` | — | - -- 表头可使用 `background-color="light-gray"`,也可以保持默认样式 -- 关键指标如使用 `<span text-color="green/red">` 突出,建议同时用 ↑↓ 或 +/- 标注方向(色觉无障碍) - -## 四、排版规范 - -- 标题层级、段落长度、列表嵌套和 Grid 列数应以可读性为准,避免过深层级和过宽分栏 -- 文档开头可以是结论、背景、摘要、问题陈述、目录或直接正文,不强制使用 `<callout>` - -## 五、质量自检 - -生成内容后可以从以下角度自检,但不要把这些项当作硬性比例或固定模板: - -| 指标 | 自检问题 | -|-|-| -| 信息表达 | 当前结构是否符合用户目标,而不是套用固定报告模板? | -| 阅读负担 | 是否有段落过长、层级过深、表格过宽或组件过多的问题? | -| 风格匹配 | 是否延续了用户给定样例或已有文档风格? | -| 组件必要性 | callout、grid、table、whiteboard 等是否真的提升理解? | -| 保真度 | 改写时是否保留了原文事实、引用、图片、附件和资源块? | +交付前快速回看: +- **叙述是否被列举化**:背景 / 现状 / 认识 / 分析 / 成效 / 过渡 / 总结等应成段;列举只用于同层级、可并列处理的信息,如问题、措施、步骤、任务或材料清单。若正文反复使用连续编号、项目符号或固定并列句式,导致内容缺少叙述,应把背景 / 认识 / 分析 / 过渡改写成有承接关系的段落(纯清单 / 台账类除外)。 +- **数据是否正确呈现**:成行成列的数据应使用表格呈现,不要写成段落,也不要用分隔符把多个字段硬串在一起。 +- **标题是否滥用**:"小标题 + 一句话"的小项不要升成标题;应改成标签行、加粗引导句段落或普通段落。 +- **编号是否统一**:全篇一套、不跳号、不跳级,尤其不要中文 + 阿拉伯混用(如「一、」配「1.1」)。 +- **组件是否克制且保真**:高亮块 / 分栏 / 画板 / 颜色应符合体裁和用户要求;引用 / 图片 / 资源块必须保留。 diff --git a/skills/lark-doc/references/style/lark-doc-update-workflow.md b/skills/lark-doc/references/style/lark-doc-update-workflow.md index 9ff07c4d0..31ed97477 100644 --- a/skills/lark-doc/references/style/lark-doc-update-workflow.md +++ b/skills/lark-doc/references/style/lark-doc-update-workflow.md @@ -5,7 +5,7 @@ ## 核心方法论 — Code-Act Loop 通过自适应的 **Code-Act Loop** 驱动文档改写,而非固定模板式的工作流。每次任务都循环执行: 1. **Plan(规划)** — 根据用户目标和文档当前状态,评估下一步该做什么 -2. **Execute(执行)** — 运行相应的 `lark-cli docs` 命令,或 **spawn** Agent 子任务并行推进 +2. **Execute(执行)** — 由主 Agent 自己运行 `lark-cli docs` 命令推进改写;仅画板渲染按需隔离到 SubAgent(见步骤二) 3. **Observe(观察)** — 检查命令输出,验证正确性,确认内容是否满足用户目标 4. **Iterate(迭代)** — 如需调整,回到 Plan 继续循环 @@ -23,33 +23,26 @@ - 需要精确跨节区间 → `docs +fetch --scope range --start-block-id xxx --end-block-id yyy`(或 `--end-block-id -1` 读到末尾) - 用户只给了模糊关键词 → `docs +fetch --scope keyword --keyword xxx --context-before 1 --context-after 1 --detail with-ids` - 用户明确要改整篇 → `docs +fetch --detail with-ids` - - 详见 [`lark-doc-fetch.md`](../lark-doc-fetch.md) "意图引导:选择正确的 --scope" + - 详见 [`lark-doc-fetch.md`](../lark-doc-fetch.md) 中「选 `--scope`(读取范围)」小节 2. 系统性评估:用户想改什么、现有文档风格是什么、哪些内容需要保留、哪些问题影响理解 -3. **画板意图识别**:逐章节扫描,按 `lark-doc-style.md`「画板意图识别」表判断哪些段落的信息适合用图表达。重要信息优先画板化,记录需要插图的章节(block ID)、推荐画板类型、mermaid/SVG路径和源内容片段 +3. **画板识别**:逐章节扫描,判断是否有段落用图明显比文字更易懂(流程 / 架构 / 时间线 / 对比 / 占比等,见 `lark-doc-style.md` 的画板原则)。默认用文字,只有确需图示才记录需要插图的章节(block ID)、推荐画板类型、mermaid/SVG路径和源内容片段 4. 向用户简要说明改进计划(包含识别出的画板机会) -### 步骤二:定向改写(并行 Agent) +### 步骤二:定向改写(单 Agent 串行) -5. **优先处理步骤一识别出的画板候选段落**: - 参考 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md)中的方式,插入图表画板。 -6. Spawn 内容改写 Agent 在不重叠的章节上并行改进,各 Agent 收到文档 token 和特定 block ID: +5. **优先处理步骤一识别出的画板候选段落**:读取并按 [lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 选型和插入;正文本身不交给 SubAgent +6. 由主 Agent **顺序逐节**改写,**不按章节拆给并行 Agent**,避免上下文割裂、重复矛盾和全文级约束失效: - 沿用或轻微调整已有文档风格,除非用户要求彻底重排版 - - 优先通过重写段落、调整标题、拆分列表或补充小标题提升可读性 - - 富 block 是可选表达手段,不因固定比例而添加;画板类需求只走第 5 步 + - 优先通过重写段落、调整标题、补充小标题提升可读性;叙述内容保持成段,**不要默认改成列表**,只有确属并列要点 / 步骤才用列表(见 `lark-doc-style.md`) + - 富 block 是可选表达手段,不因固定比例而添加,取舍遵循 `lark-doc-style.md` 的写作原则;画板类需求只走第 5 步 ### 步骤三:验证(串行) 7. 获取更新后文档局部内容,检查是否符合用户目标和已有风格 -8. 检查是否满足用户目标并保留原有关键内容;如仍有明显问题则定向修正,向用户呈现结果 +8. 检查是否满足用户目标并保留原有关键内容。再按 `lark-doc-style.md` 的「写完自检」快速核对,发现问题则定向修正 -## Agent 子任务要求 +### 步骤四:专项校验(按需执行) -内容改写 Agent 必须收到:文档 token、章节范围(标题/block ID)、`lark-doc-xml.md` 和 `lark-doc-style.md` 路径、用户目标/风格要求、具体的 `docs +update` command 和 `--block-id`。 +9. 仅当用户预期需要校验字数时,才读取并执行 [`lark-doc-word-stat.md`](../lark-doc-word-stat.md) 的「字数遵循校验」;否则跳过本项,不读取该 workflow。若执行了专项校验,向用户呈现结果 -Mermaid 图由主 Agent 直接插入 `<whiteboard type="mermaid">...</whiteboard>`,无需 SubAgent。 - -SVG SubAgent 必须收到:文档 token、插入位置(标题/block ID)、图表目标、源内容片段、`lark-doc-xml.md` 路径,以及[lark-doc-whiteboard.md](../lark-doc-whiteboard.md) 中的 "SVG 设计 Workflow" 指南。它只负责插入一个 `<whiteboard type="svg">...</whiteboard>`,不改其他正文,也不读取 `lark-whiteboard`。 - -已有画板更新 SubAgent 必须收到:board_token、图表目标、推荐画板类型、源内容片段、[`../../../lark-whiteboard/SKILL.md`](../../../lark-whiteboard/SKILL.md) 路径。它只负责写入画板,不改文档正文。 - -**上下文节省提示**:Agent 如需在自己负责的章节内重新读取内容,优先用 `docs +fetch --scope section --start-block-id <章节标题id>`(自动覆盖整节),或 `--scope range --start-block-id xxx --end-block-id yyy` 精确区间,只拉自己的章节,不要重复拉全文。 +**上下文节省提示**:主 Agent 改某节时如需重新读取,优先用 `docs +fetch --scope section --start-block-id <章节标题id>`(自动覆盖整节),或 `--scope range --start-block-id xxx --end-block-id yyy` 精确区间,只拉当前章节,不要重复拉全文。 diff --git a/skills/lark-drive/SKILL.md b/skills/lark-drive/SKILL.md index a1f1b9089..0c5e90ce1 100644 --- a/skills/lark-drive/SKILL.md +++ b/skills/lark-drive/SKILL.md @@ -29,6 +29,7 @@ metadata: - 用户要把本地 `.xlsx` / `.csv` / `.base` 导入成 Base / 多维表格 / bitable,第一步必须使用 `lark-cli drive +import --type bitable`。 - 用户要把本地 `.md` / `.docx` / `.doc` / `.txt` / `.html` 导入成在线文档,使用 `lark-cli drive +import --type docx`。 - 用户要把本地 `.pptx` 导入成飞书幻灯片,使用 `lark-cli drive +import --type slides`;当前 PPTX 导入上限是 500MB。 +- 批量执行 `drive +import` 且目标是同一个位置(同一 `--folder-token`、默认根目录,或同一 `--target-token`)时,必须串行执行;不要并发导入到同一位置,服务端可能返回并发冲突错误。 - 用户要在 Drive 里上传、创建、读取、局部 patch 或覆盖更新**原生 `.md` 文件**(不是导入成 docx),切到 [`lark-markdown`](../lark-markdown/SKILL.md)。 - 用户要比较原生 `.md` 文件的**历史版本差异**,或比较远端 Markdown 与本地草稿,切到 [`lark-markdown`](../lark-markdown/SKILL.md) 的 `lark-cli markdown +diff`;需要版本号时先用 `drive +version-history`。 - 用户要查看、下载、回滚或删除文件的**历史版本**,使用 `drive +version-history`、`drive +version-get`、`drive +version-revert`、`drive +version-delete`;这组命令同时支持 `--as user` 和 `--as bot`,自动化场景优先 `--as bot`。 @@ -102,6 +103,7 @@ lark-cli drive +inspect --url 'https://xxx.feishu.cn/wiki/wikcnXXX' | `not exist` | 使用了错误的 token | 检查 token 类型,wiki 链接必须先查询获取 `obj_token` | | `permission denied` | 没有相关操作权限 | 引导用户检查当前身份对文档/文件是否有相应操作权限;如果需要,可以授予相应权限 | | `invalid file_type` | file_type 参数错误 | 根据 `obj_type` 传入正确的 file_type(docx/doc/sheet/slides/bitable) | +| `232140101` / `232140100` / `233523001`(常见于 `drive +import` 的 `job_error_msg`) | 同一位置下存在并发导入 / 创建操作 | 批量导入到同一文件夹、根目录或同一 `--target-token` 时改为串行执行;每个失败项每次重试前等待几秒,总共最多重试 3 次,仍失败就停止并报告冲突 | ### 权限能力入口 diff --git a/skills/lark-drive/references/lark-drive-import.md b/skills/lark-drive/references/lark-drive-import.md index aaf0d7d6e..544f164ad 100644 --- a/skills/lark-drive/references/lark-drive-import.md +++ b/skills/lark-drive/references/lark-drive-import.md @@ -14,6 +14,13 @@ > [!IMPORTANT] > 当用户**未传 `--name`** 时,文档标题默认取源文件名(去掉扩展名)。在执行导入前,先友好提示用户:「当前未指定文档标题,默认将使用"xxx"作为标题。如果文件内容中也包含相同标题,导入后可能造成视觉重复。是否需要重命名?」让用户确认后再继续。 +## 批量导入串行规则 + +> [!IMPORTANT] +> 批量执行 `drive +import` 且目标是同一个位置时,必须串行执行,不要并发发起导入任务。这里的“相同位置”包括同一个 `--folder-token`、都省略 `--folder-token` 导入到默认根目录,或使用同一个 `--target-token` 导入到已有 bitable。 +> +> 如果在同一位置下并发导入,服务端可能返回并发冲突错误。看到错误信息或 `job_error_msg` 中包含 `232140101`、`232140100`、`233523001` 任一错误码时,按同位置并发操作处理:停止并发导入,改为串行处理失败项;每个失败项每次重试前等待几秒,总共最多重试 3 次;仍失败就停止并向用户报告冲突。 + ## 命令 ```bash @@ -143,6 +150,7 @@ lark-cli drive +import --file ./README.md --type docx --dry-run - “超过 20MB 自动切换分片上传”只表示上传链路会切到 multipart,不代表所有格式都允许导入超过 20MB 的文件。 - 若导入任务执行失败,会返回失败时的 `job_status` 及错误信息。 +- 若导入失败信息包含 `232140101`、`232140100`、`233523001`,通常表示同一位置下存在并发导入 / 创建操作;批量场景请改为串行执行,每个失败项每次重试前等待几秒,总共最多重试 3 次,仍失败就停止并报告冲突。 - 若内置轮询超时但任务仍在处理中,shortcut 会成功返回,并带上: - `ready=false` - `timed_out=true` diff --git a/skills/lark-drive/references/lark-drive-push.md b/skills/lark-drive/references/lark-drive-push.md index b2e405a81..0d7b881a7 100644 --- a/skills/lark-drive/references/lark-drive-push.md +++ b/skills/lark-drive/references/lark-drive-push.md @@ -15,9 +15,10 @@ | `summary.skipped` | 因 `--if-exists=skip` 或 `--if-exists=smart` 命中“无需传输”而跳过的文件数 | | `summary.failed` | 上传 / 覆盖 / 建目录 / 删除失败的条目数;**只要不为 0,命令就以非零状态退出**(结构化 `items[]` 仍在 stdout 上) | | `summary.deleted_remote` | 启用 `--delete-remote --yes` 时删除的云端文件数 | -| `items[]` | 每个条目的明细(`rel_path` / `file_token` / `action` / 覆盖时的 `version` / `size_bytes` / 失败时的 `error`) | +| `summary.aborted` | 命中终止性错误并停止后续批处理时为 `true` | +| `items[]` | 每个条目的明细(`rel_path` / `file_token` / `action` / 覆盖时的 `version` / `size_bytes` / 失败时的 `error` / `hint` / `phase` / `error_class` / `code` / `subtype` / `retryable`) | -`items[].action` 取值:`uploaded` / `overwritten` / `skipped` / `folder_created` / `deleted_remote` / `failed` / `delete_failed`。 +`items[].action` 取值:`uploaded` / `overwritten` / `skipped` / `folder_created` / `deleted_remote` / `already_deleted` / `failed` / `delete_failed`。 > 本地目录(包括空目录)会被镜像到 Drive;新建的子目录会以 `action: "folder_created"` 出现在 `items[]` 里,但**不计入** `summary.uploaded`(该字段只数文件)。已存在的远端目录复用其 token,不会重复 `create_folder`,也不会出现在 `items[]` 里。 @@ -95,6 +96,7 @@ lark-cli drive +push --local-dir ./repo --folder-token fldcnxxxxxxxxx \ - `--delete-remote`(无 `--yes`)→ Validate 直接报错:`--delete-remote requires --yes`,不会发起任何列表 / 上传 / 删除请求。 - `--delete-remote --yes` → Validate 阶段还会**动态做一次** `space:document:delete` 的 scope 预检:缺这条 scope 时整次运行立刻失败、不发任何上传请求,避免出现"上传都成功了,但删除阶段才报 missing_scope"的半同步状态。 - `--delete-remote --yes`(且 scope 已授权)→ 正常执行:先把本地文件 push 上去,再扫一遍远端 `type=file` 列表,把不在本地清单里的逐个删除。**任何上传 / 覆盖 / 建目录失败时,整段 `--delete-remote` 阶段会被跳过**(stderr 上有提示),命令以非零状态退出,远端不会被破坏。 +- 删除阶段如果服务端返回 `1061007 file has been delete`,说明目标远端文件在本次 DELETE 前已经不存在;这已经满足 `--delete-remote` 的目标状态,输出会记为 `action: "already_deleted"`,不计入 `summary.failed`,也不计入 `summary.deleted_remote`。 - 远端同名冲突且使用默认 `fail`,或冲突里混有 folder / 其他非 `type=file` 对象 → 在上传阶段前失败,删除阶段不会运行。 - 不传 `--delete-remote` → `summary.deleted_remote` 永远是 0;命令对远端"多余"文件视而不见。 - 在线文档(docx / sheet / bitable / ...)和快捷方式即使本地完全没有同名文件,也**不会**进入删除候选,因为它们从来不进 `summary.uploaded` 的对齐域。 @@ -110,22 +112,46 @@ lark-cli drive +push --local-dir ./repo --folder-token fldcnxxxxxxxxx \ "uploaded": 0, "skipped": 0, "failed": 0, - "deleted_remote": 0 + "deleted_remote": 0, + "aborted": false }, "items": [ {"rel_path": "...", "file_token": "...", "action": "folder_created"}, {"rel_path": "...", "file_token": "...", "action": "uploaded", "size_bytes": 0}, {"rel_path": "...", "file_token": "...", "action": "overwritten", "version": "...", "size_bytes": 0}, {"rel_path": "...", "file_token": "...", "action": "skipped", "size_bytes": 0}, - {"rel_path": "...", "action": "failed", "size_bytes": 0, "error": "..."}, + {"rel_path": "...", "action": "failed", "size_bytes": 0, "error": "...", "hint": "...", "phase": "upload", "error_class": "...", "code": 0, "subtype": "...", "retryable": false}, {"rel_path": "...", "file_token": "...", "action": "deleted_remote"}, - {"rel_path": "...", "file_token": "...", "action": "delete_failed", "error": "..."} + {"rel_path": "...", "file_token": "...", "action": "already_deleted"}, + {"rel_path": "...", "file_token": "...", "action": "delete_failed", "error": "...", "hint": "...", "phase": "delete", "error_class": "...", "code": 0, "subtype": "...", "retryable": false} ] } ``` `rel_path` 始终用 `/` 作为分隔符(跨平台一致)。 +## 失败处理与 agent 行为 + +`+push` 的失败项带结构化字段,agent 必须优先读 `items[].error_class` / `phase` / `code`,不要只看自然语言 `error` 文本。`summary.aborted=true` 表示命令已经遇到终止性错误并停止后续批处理;这时**不要原样重试**,先修复根因。 + +常见终止性错误: + +| `error_class` | 常见 `code` | 含义 | Agent 应对 | +|---|---:|---|---| +| `app_scope_missing` | `99991672` | 应用身份缺少 Drive / 文件夹相关 scope | 停止重试,引导开通错误里列出的应用身份权限,例如 `space:folder:create` 或 `drive:drive` | +| `user_scope_missing` | `99991679` | 用户身份缺少授权 | 停止重试,走 `lark-cli auth login --scope ...` 补错误里列出的 scope | +| `permission_denied` | `1061004` / HTTP 403 | 当前身份无权操作目标资源 | 停止重试,检查目标文件夹权限、身份类型(user / bot)和资源可见性 | +| `invalid_api_parameters` | `1061002` | API 参数被服务端拒绝 | 停止重试,检查 `--folder-token`、覆盖模式、`file_token`、文件名和上传参数;不要对同一参数组合批量重试 | +| `parent_node_missing` | `1061044` | 上传 / 建目录使用的父文件夹不存在或当前身份不可见 | 停止重试,检查 `--folder-token` 是否仍存在、是否有权限、父目录是否在 push 过程中被删除;不要继续上传同一目录树 | +| `rate_limited` | `99991400` | 触发频控 | 停止当前批次,退避后再重试 | +| `server_error` | `1061001` / `2200` | Drive 服务端异常 | 停止当前批次,稍后重试;保留 `log_id` 便于排查 | + +非终止但需要解释的状态: + +- `file_size_limit` / `1061043`:文件超过 Drive 上传限制。不要继续尝试同一文件;改拆分或换存储方式。 +- `upload_size_mismatch` / `1062009`:本地文件在上传过程中发生变化,或声明大小与实际读取大小不一致。重新扫描本地文件后再 push。 +- `remote_not_found` / `1061007`:一般表示远端文件已不存在。删除阶段的 `1061007` 会被视为 `already_deleted` 成功项;其他阶段需重新列表确认远端状态。 + ## 性能注意 - 默认 `skip` 下,已存在的远端文件一律不碰;`overwrite` 下,重复跑会重传所有命中的同名文件;`smart` 下会按 `modified_time` 跳过已对齐的远端文件,但对“远端更旧”的文件仍会进入覆盖路径,因此它减少的是**不必要的重传**,不是把覆盖风险完全拿掉。 diff --git a/skills/lark-drive/references/lark-drive-search.md b/skills/lark-drive/references/lark-drive-search.md index 0021d14fc..64e5e8578 100644 --- a/skills/lark-drive/references/lark-drive-search.md +++ b/skills/lark-drive/references/lark-drive-search.md @@ -23,6 +23,8 @@ > 错误:`lark-cli drive +search 方案` > `+search` 不接受位置参数;空 `--query` 或省略 `--query` 表示纯靠 filter 浏览(合法)。 > +> **`--query` 最长 30 个字符**:按字符数(Unicode 码点)算,中文每字算 1 个,与 ASCII 同口径;超过 30 会被服务端拒绝(`99992402 field validation failed`,**是报错不是截断**)。长关键词必须先压缩成核心实体 + 主题词(如把整句问题压成「项目名 + 主题」再搜),不要把整句原问塞进 `--query`。 +> > **列表型请求不要硬塞关键词**:如果用户只是要求"我这月创建的所有文档"、"最近半年我编辑过的文档"、"按类型分类统计"这类范围浏览 / 汇总请求,且没有给出标题片段或业务关键词,应使用 `--query ""` 搭配 `--created-by-me`、`--mine`、`--created-*`、`--edited-*`、`--doc-types` 等过滤条件。不要把"查找"、"所有文档"、"最近更新过"、"按类型分类统计"这类动作词或统计意图放进 `--query`,否则会把本来应靠 filter 命中的结果过度收窄。 ### 自然语言 → 命令映射速查 @@ -101,7 +103,7 @@ lark-cli drive +search --query 方案 --page-token '<PAGE_TOKEN>' | 参数 | 必填 | 说明 | |---|---|---| -| `--query <text>` | 否 | 搜索关键词;支持服务端高级语法(`intitle:`、`""`、`OR`、`-`)。空字符串或省略表示纯 filter 浏览 | +| `--query <text>` | 否 | 搜索关键词;支持服务端高级语法(`intitle:`、`""`、`OR`、`-`)。空字符串或省略表示纯 filter 浏览。**长度上限 30 个字符(按 Unicode 码点算,中文每字算 1 个,与 ASCII 同口径);超过 30 服务端直接报 `99992402 field validation failed`,不会截断** | | `--page-size <n>` | 否 | 每页数量,默认 15,最大 20。超过 20 自动 clamp;非正数(≤0)回落 15;**非数字值直接返回 validation 错误** | | `--page-token <token>` | 否 | 上一次响应里的 `page_token`,用于翻页 | | `--format` | 否 | `json`(默认)/ `pretty` | diff --git a/skills/lark-im/SKILL.md b/skills/lark-im/SKILL.md index 76eec0250..d07ceb3a7 100644 --- a/skills/lark-im/SKILL.md +++ b/skills/lark-im/SKILL.md @@ -59,6 +59,8 @@ The four message-pulling shortcuts (`+messages-mget`, `+chat-messages-list`, `+m ### Card Messages (Interactive) +**Before sending or replying with any `interactive` card (`+messages-send` / `+messages-reply`), you MUST read [`references/card/lark-im-card-create.md`](references/card/lark-im-card-create.md) and follow its workflow.** The card JSON passed to `--msg-type interactive --content` must be the output of that workflow — never hand-write or copy a card payload. + Card messages (`interactive` type) are not yet supported for compact conversion in event subscriptions. The raw event data will be returned instead, with a hint printed to stderr. `interactive` cards support callback events (`card.action.trigger`) — see [`references/lark-im-card-action-reply.md`](references/lark-im-card-action-reply.md). @@ -102,6 +104,7 @@ Shortcut 是对常用操作的高级封装(`lark-cli im +<verb> [flags]`)。 |----------|------| | [`+chat-create`](references/lark-im-chat-create.md) | Create a group chat or topic chat; user/bot; --chat-mode group|topic; private/public; invites users/bots; optionally sets bot manager | | [`+chat-list`](references/lark-im-chat-list.md) | List chats the current user/bot is a member of; defaults to groups; pass --types=p2p,group to include p2p single chats (user-only); user/bot; supports sorting, pagination, --exclude-muted (user-only) | +| [`+chat-members-list`](references/lark-im-chat-members-list.md) | List members of a chat; returns separate users[] / bots[] buckets; callable as user or bot; --member-types filters which kinds to return; --page-all pagination; surfaces truncations[] when the server caps a bucket | | [`+chat-messages-list`](references/lark-im-chat-messages-list.md) | List messages in a chat or P2P conversation; user/bot; accepts --chat-id or --user-id, resolves P2P chat_id, supports time range/sort/pagination | | [`+chat-search`](references/lark-im-chat-search.md) | Search visible group chats by --query keyword and/or --member-ids; user/bot; e.g. look up chat_id by group name; supports type filters, sorting, pagination, and --exclude-muted (user identity only) | | [`+chat-update`](references/lark-im-chat-update.md) | Update group chat name or description; user/bot; updates a chat's name or description | @@ -139,10 +142,8 @@ lark-cli im <resource> <method> [flags] # 调用 API ### chat.members - - `bots` — 获取群内机器人列表。Identity: supports `user` and `bot`; the caller must be in the target chat and must belong to the same tenant for internal chats. - `create` — 将用户或机器人拉入群聊。Identity: supports `user` and `bot`; the caller must be in the target chat; for `bot` calls, added users must be within the app's availability; for internal chats the operator must belong to the same tenant; if only owners/admins can add members, the caller must be an owner/admin, or a chat-creator bot with `im:chat:operate_as_owner`. - `delete` — 将用户或机器人移出群聊。Identity: supports `user` and `bot`; only group owner, admin, or creator bot can remove others; max 50 users or 5 bots per request. - - `get` — 获取群成员列表。Identity: supports `user` and `bot`; the caller must be in the target chat and must belong to the same tenant for internal chats. ### chat.user_setting @@ -213,10 +214,10 @@ lark-cli im <resource> <method> [flags] # 调用 API | `chats.get` | `im:chat:read` | | `chats.link` | `im:chat:read` | | `chats.update` | `im:chat:update` | -| `chat.members.bots` | `im:chat.members:read` | | `chat.members.create` | `im:chat.members:write_only` | | `chat.members.delete` | `im:chat.members:write_only` | | `chat.members.get` | `im:chat.members:read` | +| `+chat-members-list` | `im:chat.members:read` | | `chat.user_setting.batch_query` | `im:chat.user_setting:read` | | `chat.user_setting.batch_update` | `im:chat.user_setting:write` | | `chat.managers.add_managers` | `im:chat.managers:write_only` | diff --git a/skills/lark-im/references/card/card-2.0-schema.md b/skills/lark-im/references/card/card-2.0-schema.md new file mode 100644 index 000000000..7d731c76a --- /dev/null +++ b/skills/lark-im/references/card/card-2.0-schema.md @@ -0,0 +1,107 @@ +# 卡片 2.0 组件大纲 + +Card 2.0 组件按**容器 / 展示 / 交互**三类,均通过 `tag` 字段声明。先在下表按用途选组件,再点明细看字段:有明细文件的点 `components/<tag>.md`(完整字段+示例+易错点),低频组件点链接看官方文档。 + +## 根结构 + +顶层固定四字段,先搭骨架再往 `body.elements` 填组件。以下为**推荐完整骨架**(含 type scale、light/dark color token、header 三件套): + +```json +{ + "schema": "2.0", + "config": { + "update_multi": true, + "width_mode": "default", + "style": { + "text_size": { + "title": { "default": "heading-2", "pc": "heading-2", "mobile": "heading-3" }, + "body": { "default": "normal", "pc": "normal", "mobile": "normal" }, + "caption": { "default": "notation", "pc": "notation", "mobile": "notation" } + }, + "color": { + "cus-primary": { "light_mode": "rgba(30,120,255,1)", "dark_mode": "rgba(80,150,255,1)" }, + "cus-primary-bg": { "light_mode": "rgba(30,120,255,0.08)", "dark_mode": "rgba(80,150,255,0.12)" }, + "cus-muted": { "light_mode": "rgba(100,106,115,1)", "dark_mode": "rgba(150,155,163,1)" } + } + } + }, + "header": { + "title": { "tag": "plain_text", "content": "卡片标题" }, + "subtitle": { "tag": "plain_text", "content": "副标题:一句上下文(时间/来源/状态)" }, + "template": "blue", + "icon": { "tag": "standard_icon", "token": "notice_colorful" }, + "text_tag_list": [ + { "tag": "text_tag", "text": { "tag": "plain_text", "content": "状态标签" }, "color": "blue" } + ] + }, + "body": { "direction": "vertical", "padding": "12px 12px 20px 12px", "elements": [] } +} +``` + +> **按需裁剪**:`subtitle` / `text_tag_list` / color token 按实际诉求取舍,不强制全用。组件里用 `"text_size": "title"` / `"caption"` 引用 token,用 `"font_color": "cus-muted"` 引用颜色 token;主色系变化时只需改 config 里的 RGBA,全卡自动跟随。 + +- `schema` 必须显式为 `"2.0"`,否则按 1.0 渲染。`header` 详见 `components/header.md`。 +- **元素通用字段**(所有 `elements[]` 组件):`tag`(必填) · `element_id`(卡内唯一,字母开头、≤20 字符) · `margin`(外边距 [-99,99]px)。 +- `card_link`(整卡跳转):`{url, pc_url, ios_url, android_url}`,至少填 `url`;某端禁跳设 `lark://msgcard/unsupported_action`。 +- 硬限制:单卡 ≤ **200** 元素;需客户端 **≥ 7.20**(旧版仅显示 header)。 +- 颜色 / 图标枚举见 `resource/colors.md` · `resource/icons.md`。 + +**config**(全局行为,可整体省略): + +| 字段 | 默认 | 说明 | +|---|---|---| +| `update_multi` | true | 共享卡片,v2 仅支持 true | +| `width_mode` | default | `default`(≤600px) / `compact`(400px) / `fill`(撑满) | +| `enable_forward` | true | 是否允许转发 | +| `summary` | — | 会话列表预览:`{content, i18n_content:{zh_cn,en_us,…}}` | +| `streaming_mode` | false | 流式更新模式(配 `streaming_config`) | +| `style.text_size` | — | 自定义字号 token,格式 `{"<名称>":{default,pc,mobile}}`;名称可自定义(如 `title`/`caption`),组件 `text_size` 引用该名称 | +| `style.color` | — | 自定义颜色 token,格式 `{"<名称>":{light_mode,dark_mode}}`(RGBA);名称可自定义(如 `cus-primary`),组件 `font_color`/`background_style` 等字段引用 | + +> 多语言:`config.locales` 限定生效语种、`use_custom_translation` 优先用自带 i18n。 + +**body 布局字段**(均 v2 新增):`direction`(vertical/horizontal) · `padding`([0,99]px) · `horizontal_spacing`/`vertical_spacing`(`small`4/`medium`8/`large`12/`extra_large`16 或 px) · `horizontal_align`/`vertical_align`。 + +--- + +## 容器类(布局 / 组织交互) + +| 组件 | 用途 | +|---|---| +| [column_set](components/column_set.md) | 横向分栏,多列图文对齐(数据表、字段对、列表) | +| [collapsible_panel](components/collapsible_panel.md) | 折叠面板,收纳备注/长文本等次要信息 | +| [form](components/form.md) | 表单容器,批量录入表单项后一次提交 | +| [interactive_container](components/interactive_container.md) | 整块可点击区域,可统一定义样式与交互 | +| [循环容器](components/recycling_container.md) | 批量渲染同版式不同数据(仅搭建工具) | + +## 展示类(无交互) + +| 组件 | 用途 | +|---|---| +| [header](components/header.md) | 卡片标题区:主/副标题、后缀标签、主题色 | +| [div](components/div.md) | 普通文本,带前缀图标、字段对 | +| [markdown](components/markdown.md) | 富文本,最常用;@人、彩色、链接、列表、表格等 | +| [img](components/img.md) | 单图 | +| [img_combination](components/img_combination.md) | 多图拼排(双图/三图/宫格) | +| [person](components/person.md) | 单个人员头像/姓名 | +| [person_list](components/person_list.md) | 多个人员头像/姓名 | +| [chart](components/chart.md) | VChart 图表(折线/柱/饼/词云等) | +| [table](components/table.md) | 多列数据表(只能放根节点) | +| [hr](components/hr.md) | 分割线 | + +## 交互类 + +| 组件 | 用途 | +|---|---| +| [button](components/button.md) | 按钮:回调 / 跳转 / 表单提交 | +| [input](components/input.md) | 文本输入框(多嵌在 form 内) | +| [overflow](components/overflow.md) | 折叠按钮组,收纳多个操作 | +| [select_static](components/select_static.md) | 下拉单选 | +| [multi_select_static](components/multi_select_static.md) | 下拉多选 | +| [select_person](components/select_person.md) | 人员单选 | +| [multi_select_person](components/multi_select_person.md) | 人员多选 | +| [date_picker](components/date_picker.md) | 日期选择器 | +| [picker_time](components/picker_time.md) | 时间选择器 | +| [picker_datetime](components/picker_datetime.md) | 日期时间选择器 | +| [select_img](components/select_img.md) | 图片选择(单/多选) | +| [checker](components/checker.md) | 勾选器,任务勾选回调 | diff --git a/skills/lark-im/references/card/components/button.md b/skills/lark-im/references/card/components/button.md new file mode 100644 index 000000000..3b240cf37 --- /dev/null +++ b/skills/lark-im/references/card/components/button.md @@ -0,0 +1,63 @@ +# 按钮 `button` + +交互按钮,支持跳转 / 回调 / 表单提交三类行为。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "button", + "text": { "tag": "plain_text", "content": "确定" }, + "type": "primary", + "behaviors": [{ "type": "callback", "value": { "action": "ok" } }] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `button` | +| `text` | 否 | Object | / | `{tag:"plain_text", content}`,≤100 字符 | +| `type` | 否 | String | default | 见下方 type 枚举 | +| `size` | 否 | String | medium | `tiny` / `small` / `medium` / `large` | +| `width` | 否 | String | default | `default` / `fill` / `[100,∞)px` | +| `behaviors` | 是* | Array | / | 交互行为,见下;表单内按钮不用 behaviors 而用 `form_action_type` | +| `icon` | 否 | Object | / | 前缀图标(同 `div.icon`) | +| `hover_tips` | 否 | Object | / | PC 端悬浮提示,plain_text | +| `disabled` | 否 | Boolean | false | 是否禁用 | +| `disabled_tips` | 否 | Object | / | 禁用后悬浮提示,plain_text | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}`(均 plain_text,title 必填) | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +**type 枚举**:`default`(黑字描边) / `primary`(蓝字描边) / `danger`(红字描边) / `text` / `primary_text` / `danger_text`(无边框) / `primary_filled`(蓝底白字) / `danger_filled`(红底白字) / `laser`(镭射)。 + +## 按钮主次(强制) + +- 全卡仅 1 个按钮 → `type: "primary_filled"`,并 `width: "fill"` 撑满成强焦点。 +- 多个并列按钮 → 第一个(主操作)`primary_filled`,其余一律 `default`,形成「一主多次」层级。 +- 删除 / 拒绝等危险操作用 `danger` 系(`danger` 或 `danger_filled`)。 + +## behaviors(交互行为) + +```json +// 1. 服务端回调 +{ "type": "callback", "value": { "key": "v" } } +// 2. 跳转链接(可与 callback 同数组共存) +{ "type": "open_url", "default_url": "https://x", "pc_url": "", "ios_url": "", "android_url": "" } +``` + +表单容器内的按钮 **不用 behaviors**,改用根字段: + +| 字段 | 必填 | 说明 | +|---|---|---| +| `name` | 是 | 表单内唯一标识 | +| `form_action_type` | 是 | `submit`(提交表单)/ `reset`(重置) | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / interactive_container 内。 +- 2.0 已废弃 `action` 交互模块,按钮直接放 `elements`,用间距控制排列。 +- 旧式 `url`/`value` 顶层字段是 1.0 写法;2.0 一律用 `behaviors`。 +- 点击触发 `card.action.trigger`,回传 `action.tag="button"` + `action.value`(即 callback 的 value)。 diff --git a/skills/lark-im/references/card/components/chart.md b/skills/lark-im/references/card/components/chart.md new file mode 100644 index 000000000..eb0717d07 --- /dev/null +++ b/skills/lark-im/references/card/components/chart.md @@ -0,0 +1,57 @@ +# 图表 `chart` + +基于 VChart 的可视化图表(折线/柱/饼/词云等)。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "chart", + "chart_spec": { + "type": "line", + "title": { "text": "趋势" }, + "data": { "values": [ + { "time": "周一", "value": 8 }, + { "time": "周二", "value": 14 } + ] }, + "xField": "time", + "yField": "value" + } +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `chart` | +| `chart_spec` | 是 | Object | / | VChart 图表定义,见下 | +| `aspect_ratio` | 否 | String | 16:9(PC)/1:1(移动) | `1:1` / `2:1` / `4:3` / `16:9` | +| `color_theme` | 否 | String | brand | `brand` / `rainbow` / `complementary` / `converse` / `primary`;chart_spec 里声明了样式则此项无效 | +| `height` | 否 | String | auto | `auto`(按宽高比) 或 `[1,999]px`(设固定高则 aspect_ratio 失效) | +| `preview` | 否 | Boolean | true | 是否可独立窗口/全屏查看 | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## chart_spec 常用类型 + +`chart_spec` 是标准 VChart spec。核心字段:`type`、`data.values`(数据数组)、`xField`/`yField`(轴字段)、`seriesField`(分组)、`title.text`、`legends`。 + +| 图表 | type | 关键字段 | +|---|---|---| +| 折线 | `line` | `xField`, `yField` | +| 面积 | `area` | `xField`, `yField` | +| 柱状 | `bar` | `xField`, `yField`,分组加 `seriesField` | +| 条形(横向) | `bar` | `direction:"horizontal"`,`xField`=值,`yField`=类别 | +| 饼/环 | `pie` | `valueField`, `categoryField`,环图加 `innerRadius` | +| 散点 | `scatter` | `xField`, `yField` | +| 词云 | `wordCloud` | `nameField`, `valueField` | + +完整属性参考 [VChart 官方文档](https://www.visactor.io/vchart/option/barChart)。 + +## 易错点 + +- 不支持 JavaScript 语法,`chart_spec` 必须是纯 JSON。 +- 单卡建议 ≤5 个图表。 +- 移动端不支持部分 VChart 属性(纹理 texture、conical 渐变、grid 词云布局等),用了会在移动端加载失败。 +- 平台默认给 chart_spec 追加 media query 自适应;要自控可设 `"media": []`。 diff --git a/skills/lark-im/references/card/components/checker.md b/skills/lark-im/references/card/components/checker.md new file mode 100644 index 000000000..e0cf80baf --- /dev/null +++ b/skills/lark-im/references/card/components/checker.md @@ -0,0 +1,38 @@ +# 勾选器 `checker` + +任务勾选场景的交互组件,支持配置回调响应。仅支持手写 JSON,搭建工具不支持构建。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "checker", + "name": "check_1", + "checked": false, + "text": { "tag": "plain_text", "content": "完成新品上市计划报告" }, + "behaviors": [{ "type": "callback", "value": { "key": "todo1" } }] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `checker` | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `checked` | 否 | Boolean | false | 初始勾选状态 | +| `text` | 否 | Object | / | `{tag:"plain_text"\|"lark_md", content, text_size?, text_color?, text_align?}`(text_color 见 `../resource/colors.md`) | +| `overall_checkable` | 否 | Boolean | true | 悬浮时整体是否有阴影效果 | +| `button_area` | 否 | Object | / | `{pc_display_rule:"always"|"on_hover", buttons:[<=3 个 button]}` | +| `checked_style` | 否 | Object | / | `{show_strikethrough, opacity}`,勾选后的内容样式 | +| `disabled` / `disabled_tips` | 否 | Boolean/Object | false / 空 | 禁用及禁用提示 | +| `hover_tips` | 否 | Object | 空 | 悬浮提示;与 `disabled_tips` 同配时后者生效 | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]`;**未配置时仅本地勾选生效,不触发回调** | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `padding`/`margin` | 否 | String | 0 | [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 form / 交互容器 / column_set / collapsible_panel 内。 +- 不配置 `behaviors` 时勾选仅前端本地生效,不会触发服务端回调——需要业务侧感知必须显式配置。 +- 回调:`action.tag="checker"` + `action.checked`(布尔值);form 内则读 `form_value[name]`。 diff --git a/skills/lark-im/references/card/components/collapsible_panel.md b/skills/lark-im/references/card/components/collapsible_panel.md new file mode 100644 index 000000000..0abf1d2ae --- /dev/null +++ b/skills/lark-im/references/card/components/collapsible_panel.md @@ -0,0 +1,46 @@ +# 折叠面板 `collapsible_panel` + +折叠次要内容(备注、长文本),点标题展开/收起。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "collapsible_panel", + "expanded": false, + "header": { "title": { "tag": "plain_text", "content": "面板标题" } }, + "elements": [{ "tag": "markdown", "content": "折叠的内容" }] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `collapsible_panel` | +| `header` | 是 | Object | / | 标题区,见下 | +| `elements` | 否 | Array | / | 面板内组件;**不能放 `form`** | +| `expanded` | 否 | Boolean | false | 是否默认展开 | +| `background_color` | 否 | String | 透明 | 面板背景,颜色枚举(见 `../resource/colors.md`) | +| `border` | 否 | Object | / | `{ color, corner_radius }` | +| `direction` | 否 | String | vertical | `vertical` / `horizontal` | +| `vertical_spacing`/`horizontal_spacing` | 否 | String | 8px | 间距枚举或 [0,99]px | +| `padding` | 否 | String | 0 | 内边距 [0,99]px | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +**header 字段**: + +| 字段 | 必填 | 说明 | +|---|---|---| +| `title` | 否 | `{tag:"plain_text"\|"markdown", content}` | +| `background_color` | 否 | 标题区背景,颜色枚举 | +| `width` | 否 | `fill` / `auto` / `auto_when_fold`(收起时自适应) | +| `vertical_align` | 否 | `top`/`center`/`bottom` | +| `icon` | 否 | 图标 `{tag, token, color, size}`(同 `div.icon`,多 `size`) | +| `icon_position` | 否 | `left` / `right` / `follow_text` | +| `icon_expanded_angle` | 否 | 展开时图标旋转角:`-180`/`-90`/`90`/`180` | + +## 嵌套 / 易错点 + +- 内部不支持 `form`;容器最多嵌套 5 层。 +- 仅支持写 JSON,搭建工具不支持。 diff --git a/skills/lark-im/references/card/components/column_set.md b/skills/lark-im/references/card/components/column_set.md new file mode 100644 index 000000000..259bb9e9c --- /dev/null +++ b/skills/lark-im/references/card/components/column_set.md @@ -0,0 +1,53 @@ +# 分栏 `column_set` + `column` + +横向多列布局容器。`column_set` 装若干 `column`,每个 `column` 内再放组件。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "column_set", + "flex_mode": "none", + "columns": [ + { "tag": "column", "width": "weighted", "weight": 1, + "elements": [{ "tag": "markdown", "content": "左列" }] }, + { "tag": "column", "width": "weighted", "weight": 1, + "elements": [{ "tag": "markdown", "content": "右列" }] } + ] +} +``` + +## column_set 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `column_set` | +| `columns` | 是 | column[] | / | 列数组,子节点只能是 `column` | +| `flex_mode` | 否 | String | none | 窄屏自适应:`none`(按比例压缩) / `stretch`(变上下堆叠) / `flow`(自动换行) / `bisect`(两等分) / `trisect`(三等分) | +| `horizontal_spacing` | 否 | String | 8px | `small`(4)/`medium`(8)/`large`(12)/`extra_large`(16) 或 `[0,99]px` | +| `horizontal_align` | 否 | String | left | `left` / `center` / `right` | +| `background_style` | 否 | String | default | `default` 或颜色枚举/RGBA(见 `../resource/colors.md`);嵌套时上层覆盖下层 | +| `action` | 否 | Object | / | 整块点击跳转 `{ multi_url:{url,pc_url,ios_url,android_url} }` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +## column 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `column` | +| `elements` | 否 | Element[] | / | 列内组件;**不能放 `form` 和 `table`**,可放 `column_set` | +| `width` | 否 | String | auto | 仅 `flex_mode:none` 生效:`auto` / `weighted`(配 weight) / `[16,600]px` | +| `weight` | 否 | Number | 1 | `width:weighted` 时的宽度占比,1~5 整数 | +| `vertical_align` | 否 | String | top | `top` / `center` / `bottom` | +| `direction` | 否 | String | vertical | `vertical` / `horizontal` | +| `horizontal_spacing`/`vertical_spacing` | 否 | String | 8px | 同上间距枚举或 `[0,99]px` | +| `padding` | 否 | String | 0 | 内边距 [0,99]px | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `background_style` | 否 | String | default | 同上 | +| `action` | 否 | Object | / | 点击列跳转,同 column_set.action | + +## 嵌套 / 易错点 + +- **column_set 的直接子节点只能是 `column`**;不能 `column_set → column_set`。二级分栏要走 `column_set → column → column_set`。 +- column 内可放除 `form` / `table` 外的所有组件。 +- 最多嵌套 5 层,过深会压缩展示空间。 diff --git a/skills/lark-im/references/card/components/date_picker.md b/skills/lark-im/references/card/components/date_picker.md new file mode 100644 index 000000000..44ddcfd7f --- /dev/null +++ b/skills/lark-im/references/card/components/date_picker.md @@ -0,0 +1,34 @@ +# 日期选择器 `date_picker` + +提供日期选项的交互组件,默认拥有交互能力(无需显式 `behaviors` 也会回调)。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "date_picker", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "initial_date": "2024-01-01" +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `date_picker` | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `initial_date` | 否 | String | / | 初始值,格式 `yyyy-MM-dd`,会覆盖 `placeholder` | +| `placeholder` | 否 | Object | / | 占位文本,plain_text;未设 `initial_date` 时必填 | +| `width` | 否 | String | default | `default`/`fill`/`[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用(需端版本 V7.4+) | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / 交互容器内;搭建工具中暂不支持嵌套在交互容器中。 +- 提醒用户注意时区语境(如预定海外酒店用酒店所在地时区);服务端只返回用户当前时区作为参考,不代表用户选的就是该时区。 +- 回调:`action.tag="date_picker"` + `action.option`(日期字符串,如 `"2025-06-10 +0800"`)+ `action.timezone`;form 内则读 `form_value[name]`。 diff --git a/skills/lark-im/references/card/components/div.md b/skills/lark-im/references/card/components/div.md new file mode 100644 index 000000000..9b1eb77e8 --- /dev/null +++ b/skills/lark-im/references/card/components/div.md @@ -0,0 +1,36 @@ +# 普通文本 `div` + +带样式的文本块,支持前缀图标和 label-value 字段对。**Card 2.0**。富文本用 `markdown` 组件。 + +## 最小示例 + +```json +{ + "tag": "div", + "text": { "tag": "plain_text", "content": "示例文本" } +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `div` | +| `text` | 否 | Object | / | 文本对象,见下 | +| `text.tag` | 是 | String | plain_text | `plain_text` 或 `lark_md`(部分 Markdown,语法见 `markdown.md`) | +| `text.content` | 是 | String | / | 文本内容 | +| `text.text_size` | 否 | String | normal | `heading-0`~`heading-4` / `normal`(14px) / `notation`(12px) 等;可在 `config.style.text_size` 自定义 pc/mobile 不同字号 | +| `text.text_color` | 否 | String | default | 颜色枚举(见 `../resource/colors.md`),仅 `plain_text` 生效 | +| `text.text_align` | 否 | String | left | `left` / `center` / `right` | +| `text.lines` | 否 | Int | / | 最大显示行数,超出 `...` 省略 | +| `icon` | 否 | Object | / | 前缀图标,见下 | +| `icon.tag` | 否 | String | / | `standard_icon`(用 `token`+`color`,token 见 `../resource/icons.md`)或 `custom_icon`(用 `img_key`) | +| `width` | 否 | String | fill | `fill` / `auto` / `[16,999]px` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符;流式更新时 `text.element_id` 指定文本 | + +> `fields` 字段(多列 label-value):数组,每项 `{ is_short, text:{tag,content} }`,`is_short:true` 可并排。 + +## 易错点 + +- `text_color` 只在 `text.tag` 为 `plain_text` 时生效;`lark_md` 用内联 `<font color=red>` 着色。 diff --git a/skills/lark-im/references/card/components/form.md b/skills/lark-im/references/card/components/form.md new file mode 100644 index 000000000..b3bd6c6d8 --- /dev/null +++ b/skills/lark-im/references/card/components/form.md @@ -0,0 +1,51 @@ +# 表单容器 `form` + +批量录入表单项后一次提交:用户在前端填写多个表单项,点击提交按钮后将所有值打包一次性回调到服务端。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "form", + "name": "form_1", + "elements": [ + { "tag": "input", "name": "reason", "required": true }, + { + "tag": "button", + "text": { "tag": "plain_text", "content": "提交" }, + "type": "primary", + "form_action_type": "submit", + "name": "Button_submit" + } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `form` | +| `name` | 是 | String | / | 表单容器唯一标识,卡片内全局唯一,用于识别提交数据归属 | +| `elements` | 是 | Element[] | [] | 子节点,支持除 `table` 和 `form` 外的所有组件 | +| `direction` | 否 | String | vertical | `vertical` / `horizontal` | +| `horizontal_spacing`/`vertical_spacing` | 否 | String | 8px/12px | 间距枚举 `small`(4)/`medium`(8)/`large`(12)/`extra_large`(16) 或 `[0,99]px` | +| `horizontal_align` | 否 | String | left | `left`/`center`/`right` | +| `vertical_align` | 否 | String | top | `top`/`center`/`bottom` | +| `padding`/`margin` | 否 | String | 0 | [-99,99]px,支持单值/双值/四值写法 | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +### 子组件内嵌字段(交互组件嵌在 form 内时生效) + +| 字段 | 必填 | 说明 | +|---|---|---| +| `name` | 是 | 表单内组件唯一标识,卡片全局唯一,否则提交失败 | +| `required` | 否 | 是否必填;为 true 且未填时点提交会本地拦截,不发起回调 | +| `form_action_type` | 是(按钮) | `submit`(提交)/ `reset`(重置初始值);表单内按钮**不用** `behaviors` | + +## 嵌套 / 易错点 + +- `form` 不支持嵌套 `table` 和 `form`;且 `form` 本身只能放卡片根节点下,不能被其他组件嵌套。 +- form 内所有交互组件的 `name` 必须填且全局唯一,否则提交失败。 +- 表单内必须包含一个 `form_action_type: submit` 的按钮。 +- 回调来源:`card.action.trigger` 中 `action.tag="button"` + `action.form_value`(按组件 `name` 映射各字段值)。 diff --git a/skills/lark-im/references/card/components/header.md b/skills/lark-im/references/card/components/header.md new file mode 100644 index 000000000..c6e7ebd2b --- /dev/null +++ b/skills/lark-im/references/card/components/header.md @@ -0,0 +1,34 @@ +# 标题 `header` + +卡片顶部标题区(主/副标题、后缀标签、图标、主题色)。**Card 2.0**。挂在卡片根的 `header` 键下,不在 `body.elements` 内,单卡仅一个。 + +## 最小示例 + +```json +{ + "header": { + "title": { "tag": "plain_text", "content": "卡片标题" }, + "template": "blue" + } +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 说明 | +|---|---|---|---| +| `title` | 是 | Object | 主标题,`{tag:"plain_text"\|"lark_md", content}`,最多 4 行 | +| `subtitle` | 否 | Object | 副标题,同 title,最多 1 行;只配副标题会按主标题展示 | +| `template` | 否 | String | 主题色枚举,见下;默认 `default` | +| `text_tag_list` | 否 | Array | 后缀标签,最多 3 个,每项 `{tag:"text_tag", text:{tag:"plain_text",content}, color}` | +| `i18n_text_tag_list` | 否 | Object | 多语言后缀标签;与 `text_tag_list` 二选一,同配以多语言为准 | +| `icon` | 否 | Object | 前缀图标(同 `div.icon`) | +| `padding` | 否 | String | 内边距,默认 12px,[0,99]px | + +**template 枚举**(13 色):`blue` / `wathet` / `turquoise` / `green` / `yellow` / `orange` / `red` / `carmine` / `violet` / `purple` / `indigo` / `grey` / `default`。 + +**标签 color 枚举**:`neutral`/`blue`/`turquoise`/`lime`/`orange`/`violet`/`indigo`/`wathet`/`green`/`yellow`/`red`/`purple`/`carmine`。深浅档位及 RGBA 见 `../resource/colors.md`。 + +## 选色建议 + +按场景选 template 颜色见 `../lark-im-card-style.md` 意图表。常见语义:green=成功/完成,orange=警告,red=错误/危险,grey=失效/归档,blue=通用信息。 diff --git a/skills/lark-im/references/card/components/hr.md b/skills/lark-im/references/card/components/hr.md new file mode 100644 index 000000000..0dd83fc46 --- /dev/null +++ b/skills/lark-im/references/card/components/hr.md @@ -0,0 +1,17 @@ +# 分割线 `hr` + +分隔卡片内容的水平线。**Card 2.0**(1.0 同名 `hr`)。 + +## 最小示例 + +```json +{ "tag": "hr" } +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `hr` | +| `margin` | 否 | String | 0 | 外边距,范围 [-99,99]px,如 `"8px 0"` | +| `element_id` | 否 | String | / | 组件唯一标识,字母开头、≤20 字符 | diff --git a/skills/lark-im/references/card/components/img.md b/skills/lark-im/references/card/components/img.md new file mode 100644 index 000000000..afad6a23a --- /dev/null +++ b/skills/lark-im/references/card/components/img.md @@ -0,0 +1,34 @@ +# 图片 `img` + +展示图片。需先调上传图片接口拿 `img_key`。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "img", + "img_key": "img_v3_xxx", + "alt": { "tag": "plain_text", "content": "" } +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `img` | +| `img_key` | 是 | String | / | 图片 key,上传图片接口获取 | +| `alt` | 是 | Object | / | hover 说明,`{tag:"plain_text", content:""}`,不需要传空 | +| `title` | 否 | Object | / | 图片标题,plain_text 对象 | +| `scale_type` | 否 | String | crop_center | `crop_center` / `crop_top` / `fit_horizontal`(不裁剪) | +| `size` | 否 | String | / | 仅 `crop_*` 生效:`stretch`/`large`(160)/`medium`(80)/`small`(40)/`tiny`(16),或 `"100px 100px"` | +| `corner_radius` | 否 | String | / | 圆角,`[0,∞]px` 或 `[0,100]%` | +| `transparent` | 否 | Boolean | false | 是否透明底 | +| `preview` | 否 | Boolean | true | 点击是否放大;配 `card_link` 跳转时设 false | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## 易错点 + +- 通栏效果:2.0 不再支持 `size: stretch_without_padding`,改用负 `margin`(如 `"4px -12px"`)。 +- 上传规范:≤10M、尺寸 ≤1500×3000px、高:宽 ≤16:9。 diff --git a/skills/lark-im/references/card/components/img_combination.md b/skills/lark-im/references/card/components/img_combination.md new file mode 100644 index 000000000..43a8664cb --- /dev/null +++ b/skills/lark-im/references/card/components/img_combination.md @@ -0,0 +1,30 @@ +# 多图混排 `img_combination` + +多张图片按预设版式拼排。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "img_combination", + "combination_mode": "double", + "img_list": [{ "img_key": "img_v3_a" }, { "img_key": "img_v3_b" }] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `img_combination` | +| `combination_mode` | 是 | String | / | `double`(≤2) / `triple`(≤3) / `bisect`(双列,≤6) / `trisect`(三列,≤9) | +| `img_list` | 是 | Array | / | 每项 `{ img_key }`,顺序即排列顺序 | +| `combination_transparent` | 否 | Boolean | false | 是否透明底 | +| `corner_radius` | 否 | String | / | 圆角,`[0,∞]px` 或 `[0,100]%` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## 易错点 + +- 图片数超过 mode 上限:只显示靠前的,其余丢弃;不足则留空白。 +- 上传规范:≤10M、≤1500×3000px、高:宽 ≤16:9。 diff --git a/skills/lark-im/references/card/components/input.md b/skills/lark-im/references/card/components/input.md new file mode 100644 index 000000000..2a996fd4b --- /dev/null +++ b/skills/lark-im/references/card/components/input.md @@ -0,0 +1,43 @@ +# 输入框 `input` + +收集用户文本输入。常嵌在 `form` 内配合提交按钮使用。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "input", + "name": "comment", + "placeholder": { "tag": "plain_text", "content": "请输入" }, + "label": { "tag": "plain_text", "content": "备注:" } +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `input` | +| `name` | 否* | String | / | 唯一标识;**在 form 内必填且全局唯一**,用于识别提交数据 | +| `required` | 否 | Boolean | false | 是否必填(仅 form 内生效) | +| `placeholder` | 否 | Object | / | 占位文本,plain_text,≤100 字符 | +| `default_value` | 否 | String | / | 预填内容 | +| `label` | 否 | Object | / | 描述文本,plain_text | +| `label_position` | 否 | String | top | `top` / `left`(窄屏自动转 top) | +| `input_type` | 否 | String | text | `text` / `multiline_text`(多行,回调含 `\n`) / `password` | +| `rows` | 否 | Number | 5 | 多行时默认行数 | +| `auto_resize` | 否 | Boolean | false | 多行时高度自适应(仅 PC) | +| `max_rows` | 否 | Number | / | `auto_resize` 时最大行数 | +| `max_length` | 否 | Number | 1000 | 最大字符数,[1,1000] | +| `show_icon` | 否 | Boolean | true | password 时是否显示前缀图标 | +| `width` | 否 | String | default | `default` / `fill` / `[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用(配 `disabled_tips` plain_text) | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / interactive_container 内。 +- 在 form 内为**异步提交**:用户填完点提交按钮才一次性回调全部表单数据。 +- 回调里 `action.tag="input"` + `action.input_value`(用户输入值);form 提交则值在 `form_value` 内。 diff --git a/skills/lark-im/references/card/components/interactive_container.md b/skills/lark-im/references/card/components/interactive_container.md new file mode 100644 index 000000000..6920e879c --- /dev/null +++ b/skills/lark-im/references/card/components/interactive_container.md @@ -0,0 +1,46 @@ +# 交互容器 `interactive_container` + +整块可点击区域,统一定义内嵌内容的样式和交互(callback/open_url),适合卡片内的列表项、可点击卡片块。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "interactive_container", + "width": "fill", + "has_border": true, + "border_color": "grey", + "corner_radius": "8px", + "padding": "4px 12px 4px 12px", + "behaviors": [{ "type": "callback", "value": { "key": "value" } }], + "elements": [ + { "tag": "markdown", "content": "帮我生成一篇产品方案的框架" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `interactive_container` | +| `elements` | 是 | Element[] | [] | 子节点,支持除 `form`/`table` 外的所有组件 | +| `behaviors` | 是 | Array | / | 点击整容器的交互:`callback`(回传)/ `open_url`(跳转),可同数组共存 | +| `width` | 否 | String | fill | `fill`/`auto`/`[16,999]px` | +| `height` | 否 | String | auto | `auto`/`[10,999]px` | +| `direction` | 否 | String | vertical | `vertical`/`horizontal` | +| `horizontal_align`/`vertical_align` | 否 | String | left/top | 对齐方式 | +| `background_style` | 否 | String | default | `default`/`laser`/颜色枚举/RGBA(见 `../resource/colors.md`) | +| `has_border` | 否 | Boolean | false | 是否展示 1px 边框 | +| `border_color` | 否 | String | grey | `has_border` 为 true 时生效 | +| `corner_radius` | 否 | String | 0px | `[0,∞]px` 或 `[0,100]%` | +| `padding`/`margin` | 否 | String | 4px,12px / 0px | 同间距写法 | +| `disabled` / `disabled_tips` | 否 | Boolean/Object | false / 空 | 禁用整容器及禁用提示 | +| `hover_tips` | 否 | Object | 空 | PC 端悬浮提示 | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | + +## 嵌套 / 易错点 + +- 可嵌套除 `form`/`table` 外的所有组件,包括嵌套自身(列表项常见写法)。 +- 若容器内有交互组件(如内部 `button`),优先响应该子组件的交互,容器级 `behaviors` 不会触发。 +- 回调来源:`card.action.trigger`,`action.tag` 取决于内部触发的具体组件;容器本身被点击时 `action.value` 即容器 `behaviors.value`。 diff --git a/skills/lark-im/references/card/components/markdown.md b/skills/lark-im/references/card/components/markdown.md new file mode 100644 index 000000000..d6b7e2708 --- /dev/null +++ b/skills/lark-im/references/card/components/markdown.md @@ -0,0 +1,56 @@ +# 富文本 `markdown` + +支持 Markdown + 部分 HTML 的富文本。最常用的内容组件。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "markdown", + "content": "**标题**\n正文,<font color='red'>红字</font>,[链接](https://x)" +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `markdown` | +| `content` | 是 | String | / | Markdown 文本;JSON 里用 `\n` 换行 | +| `text_size` | 否 | String | normal | `heading-0`~`heading-4` / `normal`(14px) / `notation`(12px) 等;可在 `config.style.text_size` 自定义 pc/mobile 字号 | +| `text_align` | 否 | String | left | `left` / `center` / `right` | +| `icon` | 否 | Object | / | 前缀图标(同 `div.icon`) | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## 常用语法 + +| 效果 | 语法 | +|---|---| +| 粗 / 斜 / 删除线 | `**粗**`、`*斜*`、`~~删~~`(前后留空格更稳) | +| 换行 | JSON 内 `\n`;或 `<br>` | +| 文字链接 | `[文字](https://x)`(必须带 http/https) | +| 带图标链接 | `<link icon='chat_outlined' …>文案</link>`(icon token 见 `../resource/icons.md`) | +| 彩色文本 | `<font color='red'>红字</font>`(color 枚举见 `../resource/colors.md`;链接文本不可着色) | +| 标签 | `<text_tag color='blue'>标签</text_tag>`(color:neutral/blue/turquoise/lime/orange/violet/indigo/wathet/green/yellow/red/purple/carmine) | +| @ 人 | `<at id=ou_xxx></at>`、`<at id=all></at>`、`<at ids=id1,id2></at>` | +| @所有人 | `<at id=all></at>`(需群主开权限,否则发送失败) | +| 人员卡片 | `<person id='ou_xxx' show_name=true show_avatar=true style='normal'></person>` | +| 数字角标 | `<number_tag>1</number_tag>`(0-99,可加 background_color/font_color/url) | +| 国际化时间 | `<local_datetime millisecond='' format_type='date_num'></local_datetime>` | +| 标题 | `# 一级` ~ `###### 六级`(大标题显丑,正文优先用加粗,见易错点) | +| 列表 | `- 项`(无序)/ `1. 项`(有序),4 空格一层缩进 | +| 引用 | `> 引用文字` | +| 行内/块代码 | `` `code` `` / ```` ```go ... ``` ````(可指定语言) | +| 分割线 | `<hr>` 或 `---`(需单独一行) | +| 图片 | `![hover文案](img_key)` | +| 表格 | 标准 MD 表格;除标题最多 5 行(超出分页),单组件 ≤4 表 | +| 飞书表情 | `:DONE:`、`:OK:` | + +## 易错点 + +- **慎用大标题**:`#` / `##` / `###` 一~三级标题字号过大、显丑,正文里一律用 `**加粗**` 替代来突出重点。**唯一例外**是「指标卡」里用 `##` 放大数值(见 `../lark-im-card-style.md` 视觉规范)。 +- **少用 `markdown` 的 `margin`**:间距优先交给父容器的 `vertical_spacing` / `padding`,多数情况置 `0px`;仅精细缩进时设非零值(见 `../lark-im-card-style.md` 间距纪律)。 +- 2.0 不再支持旧的 `[xx]($urlVal)` + `href` 差异化跳转语法,改用 `<link>`。 +- 要展示 Markdown 特殊字符(`* ~ > < [ ] ( ) # : _` 等)须 HTML 转义,如 `<`→`<`、`*`→`*`。 +- `content` 里的引号注意与 JSON 转义;属性值用单引号可减少冲突。 diff --git a/skills/lark-im/references/card/components/multi_select_person.md b/skills/lark-im/references/card/components/multi_select_person.md new file mode 100644 index 000000000..95430351b --- /dev/null +++ b/skills/lark-im/references/card/components/multi_select_person.md @@ -0,0 +1,40 @@ +# 人员选择-多选 `multi_select_person` + +从候选人员中多选。**Card 2.0**。字段与 `select_person` 基本一致,差别在多选默认值。 + +## 最小示例 + +```json +{ + "tag": "multi_select_person", + "name": "reviewers", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "options": [ + { "value": "ou_xxx" }, + { "value": "ou_yyy" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `multi_select_person` | +| `options` | 否 | Array | / | 候选人 `{value: open_id}`;为空或全无效时候选项为会话全体成员 | +| `selected_values` | 否 | String[] | / | 默认选中的 open_id 数组 | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `type` | 否 | String | default | `default`(带框) / `text`(纯文本) | +| `placeholder` | 否 | Object | / | 占位文本,plain_text | +| `width` | 否 | String | default | `default` / `fill` / `[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用 | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / interactive_container 内。 +- `options[].value` 只接受 **open_id**;默认选中用 `selected_values`(数组)。 +- 回调返回选中的多个 open_id。 diff --git a/skills/lark-im/references/card/components/multi_select_static.md b/skills/lark-im/references/card/components/multi_select_static.md new file mode 100644 index 000000000..ffc5f2ffb --- /dev/null +++ b/skills/lark-im/references/card/components/multi_select_static.md @@ -0,0 +1,40 @@ +# 下拉多选 `multi_select_static` + +下拉菜单多选。**Card 2.0**。字段与 `select_static` 基本一致,差别在多选默认值。 + +## 最小示例 + +```json +{ + "tag": "multi_select_static", + "name": "tags", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "options": [ + { "text": { "tag": "plain_text", "content": "选项1" }, "value": "1" }, + { "text": { "tag": "plain_text", "content": "选项2" }, "value": "2" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `multi_select_static` | +| `options` | 否 | Array | / | 选项 `{text:{plain_text}, value, icon?}`,`value` 不可重复 | +| `selected_values` | 否 | String[] | / | 默认选中的 value 数组 | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `type` | 否 | String | default | `default`(带框) / `text`(纯文本) | +| `placeholder` | 否 | Object | / | 占位文本,plain_text | +| `width` | 否 | String | default | `default`(带框固定282px) / `fill` / `[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用 | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / interactive_container 内。 +- 选项 `value` 唯一;默认选中用 `selected_values`(数组)而非单选的 `initial_*`。 +- 回调返回选中的多个值。 diff --git a/skills/lark-im/references/card/components/overflow.md b/skills/lark-im/references/card/components/overflow.md new file mode 100644 index 000000000..0ce373b53 --- /dev/null +++ b/skills/lark-im/references/card/components/overflow.md @@ -0,0 +1,36 @@ +# 折叠按钮组 `overflow` + +折叠多个选项按钮,点击展开。适用于操作较多的场景。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "overflow", + "options": [ + { "text": { "tag": "plain_text", "content": "选项A" }, "value": "a" }, + { "text": { "tag": "plain_text", "content": "选项B" }, "value": "b" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `overflow` | +| `options` | 是 | Array | / | 选项按钮,见下 | +| `options[].text` | 否 | Object | / | `{tag:"plain_text", content}`,≤100 字符 | +| `options[].value` | 否 | String | / | 点击回传值,用于区分点了哪个选项(回调 `action.option`) | +| `options[].multi_url` | 否 | Object | / | 跳转链接 `{url, pc_url, ios_url, android_url}` | +| `behaviors` | 否 | Array | / | 额外回传:`[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}`(均 plain_text) | +| `width` | 否 | String | default | `default` / `fill` / `[100,∞)px` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## 嵌套 / 易错点 + +- 可嵌套在 form / collapsible_panel / 循环容器 / interactive_container / column_set 内。 +- 多按钮时务必给每个 `options[].value`,否则回调无法区分点了哪个。 +- 点击触发 `card.action.trigger`,回传 `action.tag = "overflow"` + `action.option`。 diff --git a/skills/lark-im/references/card/components/person.md b/skills/lark-im/references/card/components/person.md new file mode 100644 index 000000000..afcf30a8b --- /dev/null +++ b/skills/lark-im/references/card/components/person.md @@ -0,0 +1,30 @@ +# 人员 `person` + +展示单个用户的头像/姓名,点击可看名片。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "person", + "user_id": "ou_xxx", + "show_name": true +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `person` | +| `user_id` | 是 | String | / | 人员 ID,支持 open_id / union_id / user_id | +| `size` | 否 | String | medium | `extra_small` / `small` / `medium` / `large` | +| `show_avatar` | 否 | Boolean | true | 是否显示头像 | +| `show_name` | 否 | Boolean | false | 是否显示姓名 | +| `style` | 否 | String | normal | `normal` / `capsule`(胶囊) | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## 易错点 + +- 发卡应用需有访问用户 ID 的权限,否则人员信息无法展示。 diff --git a/skills/lark-im/references/card/components/person_list.md b/skills/lark-im/references/card/components/person_list.md new file mode 100644 index 000000000..bf8c9ac7f --- /dev/null +++ b/skills/lark-im/references/card/components/person_list.md @@ -0,0 +1,31 @@ +# 人员列表 `person_list` + +展示多个用户的头像/姓名。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "person_list", + "persons": [{ "id": "ou_xxx" }, { "id": "ou_yyy" }] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `person_list` | +| `persons` | 是 | Array | / | 每项 `{ id }`,id 支持 open_id / union_id / user_id | +| `show_name` | 否 | Boolean | true | 是否显示姓名;关掉且多人时为"葫芦串"叠头像样式 | +| `show_avatar` | 否 | Boolean | false | 是否显示头像 | +| `size` | 否 | String | medium | `extra_small` / `small` / `medium` / `large` | +| `lines` | 否 | Int | / | 最大行数,不可为 0 | +| `drop_invalid_user_id` | 否 | Boolean | false | true 忽略无效 ID;false 则有无效 ID 时报错 | +| `icon` / `ud_icon` | 否 | Object | / | 前缀图标(同 `div.icon`);两者同设以 `icon` 为准 | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | +| `element_id` | 否 | String | / | 唯一标识,字母开头 ≤20 字符 | + +## 易错点 + +- 发卡应用需有访问用户 ID 的权限,否则无法展示人员信息。 diff --git a/skills/lark-im/references/card/components/picker_datetime.md b/skills/lark-im/references/card/components/picker_datetime.md new file mode 100644 index 000000000..8ee77d824 --- /dev/null +++ b/skills/lark-im/references/card/components/picker_datetime.md @@ -0,0 +1,34 @@ +# 日期时间选择器 `picker_datetime` + +提供日期+时间选项的交互组件,默认拥有交互能力。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "picker_datetime", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "initial_datetime": "2024-01-01 08:00" +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `picker_datetime` | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `initial_datetime` | 否 | String | / | 初始值,格式 `yyyy-MM-dd HH:mm`,会覆盖 `placeholder` | +| `placeholder` | 否 | Object | / | 占位文本,plain_text;未设 `initial_datetime` 时必填 | +| `width` | 否 | String | default | `default`/`fill`/`[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用(需端版本 V7.4+) | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / 交互容器内;搭建工具中暂不支持嵌套在交互容器中。 +- 提醒用户注意时区语境;服务端只返回用户当前时区作为参考,不代表用户选的就是该时区。 +- 回调:`action.tag="picker_datetime"` + `action.option`(如 `"2025-06-10 19:19 +0800"`)+ `action.timezone`;form 内则读 `form_value[name]`。 diff --git a/skills/lark-im/references/card/components/picker_time.md b/skills/lark-im/references/card/components/picker_time.md new file mode 100644 index 000000000..a56a9580b --- /dev/null +++ b/skills/lark-im/references/card/components/picker_time.md @@ -0,0 +1,34 @@ +# 时间选择器 `picker_time` + +提供时间选项的交互组件,默认拥有交互能力。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "picker_time", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "initial_time": "09:00" +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `picker_time` | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `initial_time` | 否 | String | / | 初始值,格式 `HH:mm`,会覆盖 `placeholder` | +| `placeholder` | 否 | Object | / | 占位文本,plain_text;未设 `initial_time` 时必填 | +| `width` | 否 | String | default | `default`/`fill`/`[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用(需端版本 V7.4+) | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / 交互容器内;搭建工具中暂不支持嵌套在交互容器中。 +- 提醒用户注意时区语境;服务端只返回用户当前时区作为参考,不代表用户选的就是该时区。 +- 回调:`action.tag="picker_time"` + `action.option`(时间字符串,如 `"05:05 +0800"`)+ `action.timezone`;form 内则读 `form_value[name]`。 diff --git a/skills/lark-im/references/card/components/recycling_container.md b/skills/lark-im/references/card/components/recycling_container.md new file mode 100644 index 000000000..40754f474 --- /dev/null +++ b/skills/lark-im/references/card/components/recycling_container.md @@ -0,0 +1,35 @@ +# 循环容器(搭建工具专属,无 JSON tag) + +批量渲染同版式不同数据的列表(如商品列表、推荐列表)。**仅支持在飞书卡片搭建工具中可视化构建,不支持手写卡片 JSON 代码实现**——因此没有 `tag` 字段可直接编排。 + +## 使用方式 + +1. 在[卡片搭建工具](https://open.feishu.cn/cardkit)中添加循环容器组件,绑定一个对象数组变量。 +2. 在容器内添加任意展示/交互/分栏组件,并将其字段绑定到对象数组的子变量。 +3. 发布卡片模板后,发送时通过 `template_variable` 传入实际数据数组,数组每个元素对应一条循环项。 + +## 发送示例(模板 + 变量赋值) + +```json +{ + "type": "template", + "data": { + "template_id": "AAqi6xJ8rabcd", + "template_version_name": "1.0.0", + "template_variable": { + "looping": [ + { "title": "**和风陶韵**", "description": "...", "image": { "img_key": "img_v3_xxx" } }, + { "title": "**匠心之作**", "description": "...", "image": { "img_key": "img_v3_yyy" } } + ] + } + } +} +``` + +将以上 JSON 压缩转义后作为 `messages.create` 的 `content`,`msg_type` 为 `interactive`。 + +## 嵌套 / 易错点 + +- 不支持再嵌套循环容器(对象数组变量不支持嵌套对象数组类型)。 +- 数组元素个数即渲染条数,可直接控制列表长度。 +- 若循环容器内嵌表单容器的交互组件(如 input),交互组件的 `name`(表单项标识)必须绑定到不重复的子变量,否则预览/发送报错。 diff --git a/skills/lark-im/references/card/components/select_img.md b/skills/lark-im/references/card/components/select_img.md new file mode 100644 index 000000000..50c09632d --- /dev/null +++ b/skills/lark-im/references/card/components/select_img.md @@ -0,0 +1,42 @@ +# 多图选择 `select_img` + +以图片为选项的交互组件,支持单选/多选(如商品图、模板图、AI 生成图)。仅支持手写 JSON,搭建工具不支持。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "select_img", + "name": "select_img_1", + "layout": "bisect", + "aspect_ratio": "16:9", + "options": [ + { "img_key": "img_v2_xxx", "value": "picture1" }, + { "img_key": "img_v2_yyy", "value": "picture2" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `select_img` | +| `options` | 是 | Array | / | 选项,每项 `{img_key, value, disabled?, disabled_tips?, hover_tips?}` | +| `multi_select` | 否 | Boolean | false | 多选仅支持异步提交,**必须**内嵌在 form 中,否则报错 | +| `layout` | 否 | String | bisect | 图片布局:`stretch`(撑满)/`bisect`(二等分)/`trisect`(三等分) | +| `aspect_ratio` | 否 | String | 16:9 | `1:1`/`16:9`/`4:3` | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `can_preview` | 否 | Boolean | true | 点击图片是否弹窗放大(仅 form 内生效) | +| `disabled` | 否 | Boolean | false | 是否禁用整组件 | +| `value` | 否 | String/Object | / | 自定义回传参数 | +| `behaviors` | 是 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | + +## 嵌套 / 易错点 + +- 可嵌套在根节点 / column_set / form / 交互容器(搭建工具暂不支持嵌套交互容器)。 +- **不在 form 内**:仅支持单选,点击立即提交触发回调,不支持多选/异步提交。 +- **在 form 内**:支持单选/多选 + 异步提交(随表单一起提交)。 +- 回调(非 form):`action.tag="select_img"` + `action.options`(单选时仍是该字段);form 内则读 `form_value[name]`。 diff --git a/skills/lark-im/references/card/components/select_person.md b/skills/lark-im/references/card/components/select_person.md new file mode 100644 index 000000000..9ba5e261c --- /dev/null +++ b/skills/lark-im/references/card/components/select_person.md @@ -0,0 +1,39 @@ +# 人员选择-单选 `select_person` + +从候选人员中单选一人。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "select_person", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "options": [ + { "value": "ou_xxx" }, + { "value": "ou_yyy" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `select_person` | +| `options` | 否 | Array | / | 候选人,每项 `{value: open_id}`;**为空或全无效时,候选项为会话内全体成员** | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `type` | 否 | String | default | `default`(带框) / `text`(纯文本) | +| `placeholder` | 否 | Object | / | 占位文本,plain_text | +| `initial_option` | 否 | String | / | 初始选中的 open_id,须在 options 内 | +| `width` | 否 | String | default | `default` / `fill` / `[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用 | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / interactive_container 内。 +- `options[].value` 只接受 **open_id**。 +- 回调 `action.tag="select_person"` + `action.option`(选中人的 open_id)。 diff --git a/skills/lark-im/references/card/components/select_static.md b/skills/lark-im/references/card/components/select_static.md new file mode 100644 index 000000000..d1aeb557a --- /dev/null +++ b/skills/lark-im/references/card/components/select_static.md @@ -0,0 +1,43 @@ +# 下拉单选 `select_static` + +下拉菜单单选。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "select_static", + "placeholder": { "tag": "plain_text", "content": "请选择" }, + "options": [ + { "text": { "tag": "plain_text", "content": "选项1" }, "value": "1" }, + { "text": { "tag": "plain_text", "content": "选项2" }, "value": "2" } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `select_static` | +| `options` | 否 | Array | / | 选项,见下 | +| `options[].text` | 是 | Object | / | 选项名,plain_text | +| `options[].value` | 是 | String | / | 选项回调值,**同组件内不可重复** | +| `options[].icon` | 否 | Object | / | 选项前缀图标(同 `div.icon`) | +| `name` | 否* | String | / | 唯一标识;**form 内必填且全局唯一** | +| `required` | 否 | Boolean | false | 是否必选(form 内生效) | +| `type` | 否 | String | default | `default`(带框) / `text`(纯文本) | +| `placeholder` | 否 | Object | / | 占位文本,plain_text | +| `initial_option` | 否 | String | / | 初始选中内容(覆盖 placeholder 和 initial_index) | +| `initial_index` | 否 | Int | / | 初始选中序号,0=不选,1=第一个 | +| `width` | 否 | String | default | `default` / `fill` / `[100,∞)px` | +| `disabled` | 否 | Boolean | false | 是否禁用 | +| `behaviors` | 否 | Array | / | `[{type:"callback", value:{...}}]` | +| `confirm` | 否 | Object | / | 二次确认弹窗 `{title, text}` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +## 嵌套 / 易错点 + +- 可嵌套在 column_set / form / collapsible_panel / 循环容器 / interactive_container 内。 +- 选项 `value` 必须唯一,否则交互异常、服务端无法区分选了哪个。 +- 回调 `action.tag="select_static"` + `action.option`(选中项的 value)。 diff --git a/skills/lark-im/references/card/components/table.md b/skills/lark-im/references/card/components/table.md new file mode 100644 index 000000000..97734e045 --- /dev/null +++ b/skills/lark-im/references/card/components/table.md @@ -0,0 +1,53 @@ +# 表格 `table` + +多列数据表,支持文本/数字/选项/人员/日期等列类型。**Card 2.0**。 + +## 最小示例 + +```json +{ + "tag": "table", + "columns": [ + { "name": "city", "display_name": "城市", "data_type": "text" }, + { "name": "qty", "display_name": "数量", "data_type": "number" } + ], + "rows": [ + { "city": "北京", "qty": 12 }, + { "city": "上海", "qty": 8 } + ] +} +``` + +## 字段 + +| 字段 | 必填 | 类型 | 默认 | 说明 | +|---|---|---|---|---| +| `tag` | 是 | String | / | 固定 `table` | +| `columns` | 是 | column[] | / | 列定义,≤50 列,见下 | +| `rows` | 是 | Object[] | / | 行数据,按 `列name: 值` 填充 | +| `page_size` | 否 | Number | 5 | 每页行数,[1,10] | +| `row_height` | 否 | String | low | `low`/`middle`/`high`/`auto`/`[32,124]px` | +| `row_max_height` | 否 | String | 124px | `row_height:auto` 时最大行高 [32,999]px | +| `freeze_first_column` | 否 | Boolean | false | 冻结首列 | +| `header_style` | 否 | Object | / | 表头样式:`{text_align, text_size, background_style:grey\|none, text_color, bold, lines}` | +| `margin` | 否 | String | 0 | 外边距 [-99,99]px | + +**column 字段**:`name`(必填,键名) / `display_name`(表头名) / `data_type`(见下) / `width`(`auto`/`[80,600]px`/`%`) / `horizontal_align` / `vertical_align`;`number` 列可加 `format:{precision, symbol, separator}`;`date` 列可加 `date_format`(如 `YYYY/MM/DD`)。 + +**data_type 与行值结构**: + +| data_type | 行值 | +|---|---| +| `text` | `"飞书"` | +| `lark_md` | `"[链接](https://x)"` | +| `number` | `168.23` | +| `options` | `[{text:"S2", color:"blue"}]`(颜色枚举见 `../resource/colors.md`,文本勿过长) | +| `persons` | `"ou_xxx"` 或 `["ou_a","ou_b"]` | +| `date` | `1699341315000`(毫秒时间戳,按本地时区显示) | +| `markdown` | `"![img](img_key)"` 完整 Markdown | + +## 嵌套 / 易错点 + +- **table 只能放卡片根 `body.elements`**:不能被任何容器嵌套,自身也不能嵌别的组件。 +- 单卡最多 5 个 table(多语言每语言 5 个)。 +- `rows` 的键必须与 `columns[].name` 对应。 diff --git a/skills/lark-im/references/card/lark-im-card-create.md b/skills/lark-im/references/card/lark-im-card-create.md new file mode 100644 index 000000000..8dbefadcf --- /dev/null +++ b/skills/lark-im/references/card/lark-im-card-create.md @@ -0,0 +1,180 @@ +# 发送 Interactive 卡片工作流 + +用户需要发送一张飞书互动卡片时,遵循本工作流。每次都必须严格按步骤执行。 + +--- + +## 入口分支:文字 / 图片 / 图片+文字组合 + +判断用户输入类型: + +- **纯文字诉求**(无图片)→ 跳到 Step 1「文字诉求路径」。 +- **纯图片**(截图 / 设计稿,无额外文字说明内容)→ 走「以图片为输入」路径,图片既是内容源也是风格源。 +- **图片 + 文字组合** → 走「以图片为输入」路径,但**图片仅当样式/布局参考,内容来源以文字为准**(见第 5 点)。 + +### 以图片为输入时的处理 + +1. **分析图片**:从图片中提取视觉风格信息—— + - 配色方案(色环定位)、间距节奏、层级关系、分组方式、组件类型 + - 图片类型(见第 2 点) + +2. **判断图片类型**,决定保真策略: + + | 图片类型 | 判断依据 | 构造策略 | + |---|---|---| + | **飞书卡片截图** | 能识别出 header / body / components 等飞书卡片结构特征 | **高保真复刻**:将截图中每一块视觉结构映射到相近的卡片 2.0 组件;复刻后仍需过 P0–P7 硬 Gate | + | **其它设计稿 / 海报 / 网页 UI** | 无飞书卡片结构特征 | **风格萃取 + 按原则重构**:提取配色、间距、层级关系等风格 token;布局按 P0–P7 原则重构(**不像素级仿制**),产出说明偏差 | + +3. **确定内容来源**: + - **纯图片**:从图片提取内容/信息点(文字、字段、操作)作为诉求(喂给 P0) + - **图片 + 文字组合**:**以文字/文档为内容来源**,图片仅提供样式和布局参考。将文字内容按图片风格组织进卡片 + +4. **冲突处理**:当图片样式与 P0–P7 或卡片组件能力冲突时—— + - 飞书卡片截图:在组件能力允许范围内**尽量保真**,冲突处微调并告知用户偏差原因 + - 其它设计稿 / 海报 / UI:**以 P0–P7 为准**,图片仅当风格参考,冲突时不硬搬 + +5. 分析明确后,向用户简要说明你的**类型判断结论 + 保真策略 + 内容来源方案**。然后进入 Step 2 加载组件文档,进入构造。 + +--- + +## Step 1(文字诉求路径):分析意图,输出设计方案 + +**目标**:在动手写 JSON 之前,先明确所有决策并告知用户。Step 2 的文档加载量取决于这里的组件列表,所以要尽量在这一步想清楚。 + +分析以下内容并向用户简要说明: + +1. **版本**:Card 2.0 支持的组件更丰富,**推荐使用 Card 2.0**;仅当用户明确要求 1.0 时才用 1.0。 +2. **组件组合**:在 `lark-im-card-style.md` 「意图 → 组件组合」表里匹配最接近的意图行,参考推荐组件组合和该行的 `header.template` 颜色(部分行为"无 header")。推荐组合仅供参考,**最终选型以符合用户意图为准**;使用 Card 2.0 时,可同时参考 `card-2.0-schema.md` 中的组件概述来补充或调整组件选择。 +3. **交互类型**(若有):是否含会回调服务端的交互组件,以及是否有纯跳转(open_url)。回调分两类:① `select` / `multi_select` / `input` / `picker` / `overflow` 操作即默认回调;② `button` / `checker` / `interactive_container` 需显式配置 `behaviors`;`form` 提交统一回调。细则见 Step 5。 +4. **宽度模式**:`compact`(400px) 适合通知/祝福/轻提醒(内容精简、单焦点);`default`(≤600px) 适合大多数场景;`fill`(撑满) 适合数据看板、含 `table` 的宽表格。默认 `default`,有明确理由才偏离。 + +> 输出示例:"Card 2.0,header green,`default`,组件:`column_set` / `column` / `markdown`,无交互。" + +--- + +## Step 2:按需加载组件文档 + +> ⚠️ **仅 Card 2.0 适用**:`card-2.0-schema.md`、`components/` 明细都是 2.0 结构。若 Step 1 定为 **Card 1.0**(含 Step 4 降级场景),这些**不可参考**,跳过本步,直接按 1.0 结构构造。 + +**目标**:读组件明细 + 「好看的标准」,不全量加载。 + +> 组件列表来源:**文字路径** = Step 1 的设计方案;**图片路径** = 入口分支图片分析阶段确定的组件列表。 + +1. 阅读 `card-2.0-schema.md` —— 同时满足两个目的:① 了解组件概述,辅助组件选型;② 找到各组件的明细文档路由链接。**仅读一次,不重复加载。** +2. 按路由逐个读取 `components/<tag>.md`(如 `components/column_set.md`、`components/button.md`) +3. 阅读 `lark-im-card-style.md` 开头的「**好看的标准(P0–P7)**」和「视觉规范」——这是 Step 3 构造和自检的裁判基准,**构造前先内化**。 + +--- + +## Step 3:构造卡片 JSON + +按 Step 2 中对应版本的根结构骨架构造卡片,组件选型遵循 Step 1(或图片分析阶段)的设计方案。 + +- Card 2.0 必须有 `"schema": "2.0"`,否则卡片不渲染 +- `form` 容器内按钮用 `form_action_type: "submit"`,不写 `behaviors` +- `column_set` 的子节点只能是 `column`,不能直接放其他组件 +- `table` **只能放 body 根节点**,不能嵌套进 `column_set` / `interactive_container` 等容器 +- `collapsible_panel` 内**不能包含 `form`**;`interactive_container` 内**不能包含 `form`/`table`** + +### 发送前硬 Gate(按 P0–P7 自检,不过不许进 Step 4) + +构造完成后,逐条用 `lark-im-card-style.md` 的「好看的标准」做**结构化自检**。**P0 + P1–P3 是阻断项,任一不过必须回到本步修正后重判**,不得带病发送。 + +**阻断项(必须全过):** +- [ ] **P0 符合诉求**:把用户诉求拆成信息点清单,逐点在 JSON 里找到承载组件;需要的操作(按钮/表单/跳转)都齐备;无与诉求无关的填充 +- [ ] **P1 层级**:body 内有且仅有**一个**最强焦点;标题用 `**加粗**` 与正文拉开,次要信息用 grey +- [ ] **P2 分组**:同主题字段收进同一容器,不同主题分容器;**没有「一路 hr 平铺」或多主题挤在同一 markdown** +- [ ] **P3 复杂度适中**:视觉块 **2–5** 个、主色系 ≤3;且 >1 个块、至少含一个非纯文本结构元素(背景块/指标卡/图标/表格)——**既不能纯文字流水账,也不能堆砌过载** + +**基础卫生(应满足):** +- [ ] **P4 对比**:标题与正文在字号或粗细上至少差一档;正文不滥用 `#/##/###`(指标卡数值放大除外) +- [ ] **P5 对齐**:不滥用散设 `margin`,间距优先交容器;间距取值种类 ≤4;非末尾顶级容器间距一致 + +**加分项(尽量满足):** +- [ ] **P6 语义一致**:同色同义(红=降/警、绿=升/成、grey=次要);主色系起始色与 header 一致、取邻近色环 +- [ ] **P7 健壮**:并列/指标列默认 `weighted`/`none`、慎用 `stretch`;必要时配 `config.style.color` light/dark + +--- + +## Step 4:发送卡片 + +```bash +# 发送到群聊 +lark-cli im +messages-send --chat-id oc_xxx --msg-type interactive --content '<card_json>' + +# 发送给指定用户(私聊) +lark-cli im +messages-send --user-id ou_xxx --msg-type interactive --content '<card_json>' +``` + +**发送失败时**:先对照下方常见失败列表排查,若能匹配则按对应处理方式修复后重新发送;否则根据错误信息修复 JSON 后重新发送。最多尝试 **3 次**。若 3 次后仍失败,**降级为 Card 1.0 卡片**重新构造并发送。**不参考之前发送 2.0 的记忆**,完全根据用户意图重新构造 1.0 卡片。1.0 无本地参考文档(components/、resource/ 均为 2.0)。 +**常见失败列表** + +| # | 错误信息 | 处理方式 | +|---|---|---| +| 1 | `there is an invalid user resource (at/person) in your card` | 卡片中含有 at/person 组件,但使用了无效的用户 ID。询问用户其真实的 open_id / user_id,替换后重新发送。 | + +--- + +## Step 5:交互回调(可选) + +若卡片含**会回调服务端的交互组件**,则**支持**监听 `card.action.trigger` 回调(是否监听由实际需求决定,非必须): + +**需显式配置 `behaviors: [{type:"callback"}]` 才会回调:** +- `button`(带 callback behavior) +- `checker` —— 未配置 behaviors 时仅本地勾选生效,不触发服务端回调 +- `interactive_container` —— behaviors 为必填,支持 callback / open_url + +**选中 / 输入即默认回调,无需显式 `behaviors`:** +- `select_static` / `multi_select_static` / `select_person` / `multi_select_person` +- `overflow` / `input` / `date_picker` / `picker_time` / `picker_datetime` + +**form 提交统一回调(按钮用 `form_action_type: "submit"`,无需 behaviors):** +- form 内所有表单组件的值通过 `action.form_value` 一次性回传 + +> 纯 `open_url` 跳转按钮在客户端本地跳转,不回调服务端。 + +如需处理回调(监听事件、读取字段、更新卡片),见 `../lark-im-card-action-reply.md`。 + +--- + +## Step 6:用户反馈修正(按需进入) + +用户看到已发送卡片后提出修改意见时,遵循以下流程。**不要整卡重做,外科手术式修改。** + +### 1. 定位改动范围 + +把用户意见逐条映射到具体组件和字段: + +| 用户反馈类型 | 映射目标 | +|---|---| +| 文案/措辞不满意 | 对应 `markdown.content` / `button.text` / `header.title` | +| 颜色/风格不满意 | 对应 `background_style` / `font_color` / `header.template` / config color token | +| 布局/排列不满意 | 对应 `column_set.flex_mode` / `width` / `weight` / `padding` | +| 缺少某个字段/信息 | 新增 `div.fields` 条目或 `markdown` 行 | +| 某个块太拥挤/太空 | 调整 `padding` / `vertical_spacing` / `margin` | +| 交互行为问题 | 对应 `behaviors` / `confirm` / `disabled` | + +### 2. 最小改动原则 + +- 只改被指出的组件,不动周边结构。 +- 改完后**只对被修改组件所涉及的 P 项重新自检**(改颜色 → 过 P6;改分组 → 过 P1+P2;改间距 → 过 P5)。 + +### 3. 重发 + +修正完成后,重新发送一张新卡(同 Step 4),告知用户"已重新发送修正版"。 + +### 4. 执行前告知 + +向用户复述"我将修改 ×××",确认后再执行,不要静默改动。 + +--- + +## 执行清单 + +- [ ] 入口:判断是文字诉求(→ Step 1)还是图片输入(→ 图片分支 → 判断类型→保真策略→组件映射) +- [ ] Step 1:分析意图,输出设计方案(版本 / 宽度模式 / 颜色 / 组件) +- [ ] Step 2:读 schema.md + 组件明细 + 「好看的标准 P0–P7」 +- [ ] Step 3:构造 JSON → 过 P0–P7 硬 Gate(P0+P1–P3 阻断),不过先修 +- [ ] Step 4:发送,失败按常见失败表排查重试(≤3 次);仍失败则降级 Card 1.0 重构发送 +- [ ] Step 5:若有交互,参考 ../lark-im-card-action-reply.md +- [ ] Step 6:用户提出修改意见时,定位组件→最小改动→原地更新或重发 diff --git a/skills/lark-im/references/card/lark-im-card-style.md b/skills/lark-im/references/card/lark-im-card-style.md new file mode 100644 index 000000000..4093e1f99 --- /dev/null +++ b/skills/lark-im/references/card/lark-im-card-style.md @@ -0,0 +1,281 @@ +# Card Style Guide + +选择组件组合和视觉样式的决策指南。字段写法见 `card-2.0-schema.md`。 + +--- + +## 好看的标准(P0–P7,唯一裁判基准) + +**先读这一节。** 下面的「意图→组件」表和「视觉规范」都是为这套标准服务的手段;构造和自检卡片时**以 P0–P7 为准**。 + +**目标函数**:一张好卡片 = 让收件人在**约 2 秒一瞥**内 get 到「这是什么 + 最重要的是什么 + 要不要操作」,且观感**有序、克制、不嘈杂**。高效传达与视觉舒适在此统一。 + +**用力分配**:P0 必过(前置闸)→ P1–P3 强约束(阻断)→ P4–P5 基础卫生 → P6–P7 加分。 + +每条都附**结构化验证句**——卡片不能渲染成图,只能对 JSON 结构推理,所以验证靠「数结构」而非「眯眼看」。 + +| | 准则 | 可操作要求 | 结构化验证(自检句) | +|---|---|---|---| +| **P0** | **符合诉求**(前置闸·阻断) | 精确承载用户要的信息/意图/操作,不缺、不多、不跑题;意图类型与组件组合匹配 | 把诉求拆成信息点清单,逐点在 JSON 里找到承载组件;操作诉求逐个找到交互组件。有缺=不过 | +| **P1** | **层级**(强约束·阻断) | header 承载「这是什么」;body 内**有且仅有一个**最强焦点(最大字号/最重色/指标卡大数字),其余为支撑;标题用 `**加粗**`、次要信息用 grey | 列出所有文本的「字号+粗细+颜色」三元组,能否排出主>次>辅三层;焦点是否唯一 | +| **P2** | **分组**(强约束·阻断) | 同主题字段收进同一容器(`column_set`/`interactive_container`/背景块),不同主题分容器;块边界靠容器底色/描边/间距,**而非一路 `hr` 平铺** | 数顶层视觉块个数;是否存在「多主题挤在同一无分隔 markdown / 一路 hr 平铺」反模式 | +| **P3** | **复杂度适中**(强约束·阻断·双边带) | 下限:不得纯文字流水账,至少有分块+层级+适度色彩/图标;上限:视觉块 2–5、主色系 ≤3、组件不堆砌、焦点唯一 | ①是否 >1 个视觉块且含≥1 个非纯文本结构元素(背景块/指标卡/图标/表格);②块数 ≤5、主色系 ≤3。两端都满足才过 | +| **P4** | **对比**(基础卫生) | 标题与正文字号或粗细至少差一档;强调用色/放大;正文不滥用 `#/##/###`(数值焦点放大除外,见 P1) | 标题与正文是否在「字号或粗细」上至少差一档 | +| **P5** | **对齐**(基础卫生) | 间距优先交容器 `vertical_spacing`/`horizontal_spacing`/`padding`,**不滥用散设 margin 造成疏密无规律**;间距值收敛到一套档位(2/4/8/12px);顶层容器间距一致 | 是否存在无规律的散落 margin;间距取值种类是否 ≤4 | +| **P6** | **语义一致**(加分) | 红=降/警/失败、绿=升/成/通过、grey=次要;主色系起始色由 header 决定、取邻近色环;同色同义 | 同一颜色是否对应同一语义;header 模板色与块色是否同色系 | +| **P7** | **健壮**(加分) | 并列/指标列默认 `weighted` 或 `none`、**慎用 `stretch`**(防移动端拉伸);需要时配 `config.style.color` 的 light/dark;不靠固定像素宽硬排 | 是否存在 stretch 拉伸风险;深浅色是否都可读 | + +--- + +## 意图 → 组件组合 + +### 通知类(无交互或只读) + +| 用户意图 | 推荐组件组合 | header.template | +|---|---|---| +| 纯文字通知 / 系统公告 | `column_set`(通知正文,带 `blue-50` 背景)+ `button(open_url)` | `blue` | +| 活动公告(带主视觉图) | `img`(主图)+ `markdown`(时间/地点)+ `column_set`(详情对)+ `button(open_url)` | `turquoise` / `blue` | +| 成功 / 完成状态通知 | `column_set`(关键字段,带 `green-50` 背景)+ `markdown`(结论加粗) | `green` | +| 审批结果反馈(已通过 / 已拒绝) | `column_set`(申请信息)+ `column_set`(审批结论 + icon,带 `green-50`/`red-50` 背景) | `green` / `red` | +| 生日 / 节日祝福 | `img`(主图)+ `column_set`(人名/日期)+ `button(open_url)` | `orange` | +| 产品 / 功能上线推广 | `img`(主图)+ `markdown`(亮点)+ `column_set`(功能高亮块)+ `button(open_url)` | `blue` / `violet` | +| 多图展示(图集、AI 生成图) | `img_combination` 或 多个 `img` + `markdown`(说明)+ `button(callback)` | `default` | + +### 提醒 + 操作类 + +| 用户意图 | 推荐组件组合 | header.template | +|---|---|---| +| 提醒 + 一键操作 | `column_set`(详情,带 `yellow-50` 背景)+ `button(callback)` | `yellow` | +| 任务清单 / 待办跟踪 | `checker` × N(每项带 `behaviors: callback`)+ `button(callback)`(全部完成操作) | `blue` | +| 告警触发(需立即处理) | `column_set`(告警指标,带 `red-50` 背景)+ `column_set`(描述 + input 快速备注)+ `button(callback)` | `red` | +| 告警已解决 / 状态变更 | `column_set`(解决时间 / 负责人,带 `green-50` 背景)+ `markdown`(结论加粗) | `green` | +| 审批待处理(含备注输入) | `column_set`(申请信息,带 `grey-50` 背景)+ `column_set`(input 审批意见)+ `button(callback)` × 2(通过 / 拒绝) | `default` | +| 日历 / 日程提醒(含参与人) | `column_set`(时间 / 地点,带 `yellow-50` 背景)+ `person_list`(参与人)+ `button(callback)` | `yellow` | +| 危险操作确认 | `column_set`(说明,带 `red-50` 背景)+ `button(callback)` + `confirm` 弹窗配置 | `red` | + +### 数据 / 报告类 + +| 用户意图 | 推荐组件组合 | header.template | +|---|---|---| +| 日报 / 工作汇报 | `column_set`(指标,带背景色)+ `interactive_container`(进展分块,带描边)× N;内容过长的块用 `collapsible_panel` 折叠次要细节 | `blue` / `default` | +| 数据看板(含图表) | `column_set`(指标,带 `blue-50` 背景)+ `chart` + `table`(根节点,不可嵌套)+ `markdown`(说明) | `blue` | +| 排行榜 | `column_set` 固定列宽(序号 + 头像 `img` + 名字 + 指标)循环条目 | `grey` | +| 订单 / 工单详情 | `div.fields`(字段对)或 `column_set`(需彩色背景块时)+ `button(callback)` | `orange` | + +### 表单 / 收集类 + +| 用户意图 | 推荐组件组合 | header.template | +|---|---|---| +| 纯文字表单收集 | `form`(内含 `input` + `button(form_action_type: submit)`) | `blue` | +| 带下拉选择的表单(单选) | `form`(内含 `select_static` / `select_person` + `input` + `button`) | `wathet` | +| 带多选的表单 | `form`(内含 `multi_select_static` / `multi_select_person` + `input` + `button`) | `wathet` | +| 含日期 / 时间的表单 | `form`(内含 `date_picker` / `picker_time` / `picker_datetime` + `input` + `button`) | `blue` | +| 设备 / 服务反馈 | `form`(内含 `select_static`(满意度)+ `input`(备注)+ `button`) | `yellow` | +| 多步骤进度 / 引导 | `column_set`(横向步骤,带 `blue-50` 背景)+ `markdown`(当前状态)+ `button` | `blue` | + +### 推荐 / 选择类 + +| 用户意图 | 推荐组件组合 | header.template | +|---|---|---| +| 推荐列表(带图卡片,可点击) | `interactive_container`(内含 `img` + `markdown`)× N + `button(open_url)` | `blue` | +| AI 引导选项 / 功能菜单 | `markdown`(欢迎语)+ `interactive_container`(内含 `markdown` 选项说明)× N | 无 header | +| Bot 功能引导 / 教程 | `column_set`(步骤说明,带背景)+ `button` × 2(主操作 / 次操作) | `blue` | +| 服务台 / 多操作入口 | `column_set`(说明,带背景)+ `button` × N(≤3 个主操作,`type` 区分主次);次要操作超过 3 个时改用 `overflow`(折叠菜单) | 无 header | + +### 社交 / 互动类 + +| 用户意图 | 推荐组件组合 | header.template | +|---|---|---| +| 工作圈 / 社交分享 | `img_combination`(多图)+ `markdown`(正文)+ `button(open_url)` × 2 | `blue` | +| 成交 / 业绩公告 | `img`(庆祝图)+ `markdown`(成绩)+ `column_set`(关键数字) | `green` | + +--- + +## 视觉规范(实现 P0–P7 的具体战术) + +组件选型只解决「有没有」,下面各条是落地上面 P0–P7 的具体手段,括号标注它主要服务的原则。 + +> **P3 特例 — 数据看板类**:`chart + table + column_set + markdown` 是四种不同组件各出现一次,不算「堆砌」,P3 上限照常满足;但仍须保证每类只出现一次。 + +### 0. Header 图标(服务 P3 · 视觉质感底线) + +**几乎所有卡片都应配 header icon**——这是提升「精致感」成本最低的一步,缺失会让 header 显得空洞、平价。 + +```json +"header": { + "title": { "tag": "plain_text", "content": "卡片标题" }, + "template": "blue", + "icon": { "tag": "standard_icon", "token": "mail_colorful" } +} +``` + +- `token` 从 `resource/icons.md` 按场景选取;彩色图标用 `*_colorful` 后缀,单色用普通名称。 +- 常用速查:通知 `notice_colorful`、告警 `warning_colorful`、审批 `approve_colorful`、日历 `calendar_colorful`、数据 `chart_colorful`、任务 `todo_colorful`、AI `myai_colorful`。 + +### 1. 配色纪律(服务 P6 语义一致) + +- **邻近色环**:`Red → Carmine → Orange → Yellow → Green → Turquoise → Wathet → Blue → Violet → Purple →(回到)Red`。一张卡只能取色环上**相邻**的颜色,严禁跳跃(❌ blue + green + red)。 +- **最多 3 种主色系**(不含 grey / white)。 +- **起始色由 header 决定**: + - header `blue` → blue / violet / purple + - header `green` → green / turquoise / wathet + - header `red` → red / carmine / orange + - 无 header → 默认 blue / violet / purple +- **深浅语义**(写法 `blue-50`、`blue-600`、`grey-500`): + - `-50` 区块背景 · `-100` 标签背景 · `-500` 正文文字 · `-600`/`-700` 强调文字 + +### 2. 间距纪律(服务 P5 对齐 · 视觉决定性因素) + +- **body padding 推荐**:`"padding": "12px 12px 20px 12px"`(上右下左;底部 20px 留白更舒适)。 +- **优先不用 `markdown` / `column` 的 `margin` 控间距**:交给父容器的 `vertical_spacing` / `horizontal_spacing` / `padding` 统一管理,多数情况显式置 `0px`;仅在需要精细缩进(如层级左缩进)时才设非零值。 +- 容器内 `vertical_spacing` 推荐值:`2px`(高亮块内标题↔正文)/ `4px`(正文段落、列表项)/ `8px`(需拉开的元素)。 +- **容器间智能 margin**:某个顶级容器若**不是** body 最后一个元素 → 设 `"margin": "0px 0px 12px 0px"`;若**是**最后一个 → `"0px"` 或不设,避免卡片底部多余留白。 + +### 3. 指标卡模式(服务 P1 焦点 · 出现 KPI / 数值 / 统计词时强制使用) + +触发:内容含 `KPI/ROI/CTR/UV/PV/DAU/GMV/转化率/增长率/总数/营收` 等数值类信息。 + +- 多个指标并列放进一个 `column_set`,`flex_mode` **默认用 `"none"`、慎用 `"stretch"`**(防移动端拉伸变形,P7);仅在各列内容等宽、确认移动端不变形时才用 stretch。 +- 数值:用 `##` 放大(**唯一允许用 markdown 标题的特例**),可配 `<font>` 上色。 +- 描述:`<font color='grey'>` + `text_size: "notation"`。 +- 居中 `text_align: "center"`;列背景 `background_style: "grey-50"`;`padding: "12px"`;`vertical_spacing: "2px"`。 + +```json +{ + "tag": "column_set", + "flex_mode": "none", + "horizontal_spacing": "12px", + "columns": [ + { "tag": "column", "width": "weighted", "weight": 1, + "background_style": "grey-50", "corner_radius": "8px", + "padding": "12px", "vertical_spacing": "2px", + "elements": [ + { "tag": "markdown", "content": "## <font color='blue'>5,483</font>", "text_align": "center" }, + { "tag": "markdown", "content": "<font color='grey'>GMV($)</font>", "text_align": "center", "text_size": "notation" } + ] } + ] +} +``` + +### 4. 描边卡片模式(服务 P2 分组 · 进展 / 事项 / 列表项分块展示) + +用 `interactive_container` 给每个事项块加描边 + 圆角,视觉上比彩色底色更轻盈,适合进展/工单/任务列表等「多条目」场景。 + +```json +{ + "tag": "interactive_container", + "width": "fill", + "has_border": true, + "border_color": "blue-100", + "corner_radius": "8px", + "background_style": "blue-50", + "padding": "12px 12px 12px 12px", + "vertical_spacing": "4px", + "margin": "0px 0px 12px 0px", + "elements": [ + { + "tag": "markdown", + "content": "**<font color='blue'>事项标题</font>**" + }, + { + "tag": "markdown", + "content": "事项正文内容……", + "text_size": "normal" + } + ] +} +``` + +- `border_color` 跟随主色系(蓝系用 `blue-100`,绿系用 `green-100`)。 +- 不需要交互时可省略 `behaviors`;需要点击回调时加 `"behaviors": [{"type":"callback","value":{...}}]`。 +- **不能在内部放 `form` 或 `table`**。 + +### 5. 高亮块模式(服务 P2 分组 · 多分类信息成块展示) + +两层结构:外层 `column_set` 管布局,内层 `column` 管样式(彩色背景)。 + +- 每个 `column` 设 `background_style` 用浅色(如 `blue-50` / `green-50`),`padding: "12px 12px 12px 12px"`,`vertical_spacing: "4px"`,`weight: 1`。 +- 块内首行用 `**<font color='blue'>分类标题</font>**` 着色加粗,正文紧随。 +- **布局选择**:分类 ≤ 3 个且内容简短 → 水平,优先用 `flex_mode: "bisect"`(2 列)或 `"trisect"`(3 列);各列字数严格等宽且已确认移动端不变形时才用 `stretch`(慎用,见 §9);**分类 ≥ 4 个、奇数、或任一块内容 > 3 行 → 垂直**(每块独占一行)。配色按上面第 1 条邻近色环依次取色。 +- ⚠️ **版本依赖**:`column.background_style` 需客户端 **≥ v7.9**,旧版静默丢背景。要求强健壮性时改用 `interactive_container` 的 `background_style`(无版本限制)替代 column 背景色。 + +### 6. Header 三件套(服务 P1 层级 · 语境补全) + +header 有三层能力,**尽量用满**(至少用 `title` + `icon`;`subtitle` 和 `text_tag_list` 按实际诉求取舍)——这是成本最低、语境最清晰的一步: + +- `title`:这是什么(必填) +- `subtitle`:一句上下文(谁发 / 什么时间 / 什么状态),≤1 行,`plain_text` +- `text_tag_list`:状态标签,≤3 个,颜色语义与 P6 保持一致(`blue`=信息、`yellow`=待处理、`red`=紧急、`green`=完成) + +```json +"header": { + "title": { "tag": "plain_text", "content": "发版审批" }, + "subtitle": { "tag": "plain_text", "content": "2026-06-25 · 后端服务" }, + "template": "blue", + "icon": { "tag": "standard_icon", "token": "approve_colorful" }, + "text_tag_list": [ + { "tag": "text_tag", "text": { "tag": "plain_text", "content": "待审批" }, "color": "yellow" } + ] +} +``` + +**禁止**:在 `header.title` 里写 emoji;把 subtitle 信息改塞进 body 第一行 markdown,让 header 空洞;严肃场景(审批/告警/财务)在 title 或 body 标题里用装饰性 emoji。 + +### 7. 字段对用 `div.fields`,不要用 `column_set` 模拟(服务 P5 对齐) + +详情型"label: value"(订单字段、审批信息、日程详情)首选 `div.fields`——原生对齐,结构更轻: + +```json +{ + "tag": "div", + "fields": [ + { "is_short": true, "text": { "tag": "lark_md", "content": "**提交人**\n张三" } }, + { "is_short": true, "text": { "tag": "lark_md", "content": "**部门**\n研发中台" } }, + { "is_short": true, "text": { "tag": "lark_md", "content": "**提交时间**\n2026-06-25 10:30" } }, + { "is_short": true, "text": { "tag": "lark_md", "content": "**优先级**\n<font color='red'>P0</font>" } } + ] +} +``` + +`is_short: true` 的字段自动两两并排,对齐由组件保证。`column_set` 留给**需要彩色背景块 / 不等宽 / 嵌套复杂结构**的场景,不要用它模拟简单字段对。 + +### 8. 长文本必须设 `lines` 截断(服务 P3 复杂度上限) + +凡接收动态数据的文本字段,必须设最大行数避免卡片被撑爆: + +| 位置 | 字段 | 推荐上限 | +|---|---|---| +| `div.text` | `lines` | 正文 ≤4,次要说明 ≤2 | +| `person_list` | `lines` | ≤2 | +| `table.header_style` | `lines` | ≤1 | +| `collapsible_panel` | 默认折叠 | 长文本优先用折叠面板而非截断 | + +不设 `lines` 的动态文本 = P3 上限的隐患。 + +### 9. `flex_mode` 决策表(服务 P7 健壮) + +| 场景 | 推荐 flex_mode | 原因 | +|---|---|---| +| 指标卡并列(内容不等长) | `none` + `width: weighted` | 防移动端拉伸;各列按比例压缩 | +| 2 列等宽内容(字数相近) | `bisect` | 语义最清晰的两等分 | +| 3 列等宽内容 | `trisect` | 三等分,不写 weight | +| 多 tag / 多图标横排,允许换行 | `flow` | 窄屏自动折行,不挤压 | +| 明确要求两端对齐撑满且内容等宽 | `stretch` | 慎用:移动端窄屏内容过长时会拉伸变形 | + +> `stretch` 只在各列字数高度相近、且已确认移动端不变形时使用;其余场景默认 `none`。 + +### 10. `chart` 配色纳入 P6 纪律 + +`chart.color_theme` 必须与全卡色系保持一致: + +- **默认**:`brand`(单色系,跟随飞书品牌色)或 `primary`(主色单色系),安全选项。 +- **禁止**:`rainbow`——会把色环上的跳跃色全打进图表,直接击穿 P6 的"主色系 ≤3 + 邻近色环"约束。 +- **例外**:数据维度 ≥4 个系列、且各系列无主次关系(如区域对比图)时,可用 `complementary` 或在 `chart_spec` 里自定义与主色系邻近的颜色数组。 + +### 11. `laser` 样式的克制规则(服务 P6 语义一致) + +`button.type: "laser"` 和 `background_style: "laser"` 是高饱和渐变效果: + +- **允许**:AI 生成类、节日庆祝类、营销推广类,每卡 **≤1 处**,且位置在主操作按钮或视觉焦点块。 +- **禁止**:审批、告警、财务、工单、日程等严肃场景——laser 在这些场景里显得轻浮廉价。 +- **默认不用**;Step 1 设计方案里若要用,需显式说明"×× 场景适合 laser 风格"并得到确认。 diff --git a/skills/lark-im/references/card/resource/colors.md b/skills/lark-im/references/card/resource/colors.md new file mode 100644 index 000000000..0fec0f67c --- /dev/null +++ b/skills/lark-im/references/card/resource/colors.md @@ -0,0 +1,34 @@ +# 颜色枚举 + +卡片所有颜色字段(`font_color` / `text_color` / `background_style` / `border_color` / icon `color` 等)共用同一套枚举,按属性名区分用途,无单独的文字/背景色表。 + +## 基础色名(14 色系) + +`blue` `carmine` `green` `indigo` `lime` `orange` `purple` `red` `sunflower` `turquoise` `violet` `wathet` `yellow` `grey` + +> **标签例外**:`text_tag` / `<text_tag>` 的灰色用 `neutral`(不是 `grey`);标签枚举无 `grey`。 + +## 深浅后缀 + +- 彩色系(13 个非 grey):`-50 -100 -200 -300 -350 -400 -500 -600 -700 -800 -900`,数字越大越深。 +- **无后缀基础名(如 `blue`)= `-600`**(同色值)。 +- grey 范围更细:`-00 -50 -100 … -650 … -950 -1000`。 +- 用法语义:`-50` 区块背景 · `-100` 标签背景 · `-500` 正文 · `-600/-700` 强调文字。 + +## 特殊值 + +`white`(白)· `bg-white`(背景白:浅色 #ffffff / 深色 #1A1A1A)。无 `transparent` 枚举。 + +## 自定义 RGBA + +在 `config.style.color` 定义 token 再引用: + +```json +"config": { "style": { "color": { + "cus-0": { "light_mode": "rgba(5,157,178,0.52)", "dark_mode": "rgba(...)" } +} } } +``` + +组件里写 `"font_color": "cus-0"`。RGBA 支持的属性同枚举(font/text_color、background_style、border_color、icon color 等)。 + +> `column` 的 `background_style` 需客户端 v7.9+。配色搭配规则见 `../lark-im-card-style.md` 视觉规范。 diff --git a/skills/lark-im/references/card/resource/icons.md b/skills/lark-im/references/card/resource/icons.md new file mode 100644 index 000000000..4b88ca02d --- /dev/null +++ b/skills/lark-im/references/card/resource/icons.md @@ -0,0 +1,38 @@ +# 图标枚举 + +用于 `header.icon`、`div.icon`、`markdown` 的 `<link icon=...>` 等。 + +## 结构 + +```json +// 系统图标(推荐):用 token +{ "tag": "standard_icon", "token": "info_outlined", "color": "blue" } +// 自定义图标:用上传的 img_key +{ "tag": "custom_icon", "img_key": "img_v3_xxx" } +``` + +`color` 取颜色枚举(见 `colors.md`),仅对 `standard_icon` 生效。 + +## token 命名 + +- 线性:后缀 `_outlined`;面性(实心):后缀 `_filled`。 +- 主体 kebab-case,如 `calendar-add_outlined`、`delete-trash_outlined`。 + +## 常用 token(业务卡片) + +| 含义 | token | 含义 | token | +|---|---|---|---| +| 完成/对勾 | `done_outlined` | 关闭/叉 | `close_outlined` | +| 新增 | `add_outlined` | 编辑 | `edit_outlined` | +| 删除 | `delete-trash_outlined` | 搜索 | `search_outlined` | +| 设置 | `setting_outlined` | 信息 | `info_outlined` | +| 警告 | `warning_outlined` | 时间 | `time_outlined` | +| 日历 | `calendar_outlined` | 成员 | `member_outlined` | +| 群组 | `group_outlined` | 会话 | `chat_outlined` | +| 邮件 | `mail_outlined` | 链接 | `link-copy_outlined` | +| 分享 | `share_outlined` | 下载 | `download_outlined` | +| 通知/铃铛 | `bell_outlined` | 定位 | `pin_outlined` | +| 附件 | `attachment_outlined` | 审批 | `approval_outlined` | + +> token 必须与官方完全一致,否则图标不渲染。上表为常用项,全量(数百个,分系统/商务/沟通/用户/媒体/文档等类目)以官方图标库为准: +> https://open.larkoffice.com/document/feishu-cards/enumerations-for-icons diff --git a/skills/lark-im/references/lark-im-chat-members-list.md b/skills/lark-im/references/lark-im-chat-members-list.md new file mode 100644 index 000000000..9a22b9aed --- /dev/null +++ b/skills/lark-im/references/lark-im-chat-members-list.md @@ -0,0 +1,83 @@ +# im +chat-members-list + +> **Prerequisite:** Read [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) first to understand authentication, global parameters, and safety rules. + +List the members of a chat. Users and bots are returned in **separate buckets** — `users[]` and `bots[]` — with per-bucket totals (`user_total` / `bot_total`). Use `--member-types` to return only one kind. + +This skill maps to the shortcut: `lark-cli im +chat-members-list` (internally calls `GET /open-apis/im/v1/chats/{chat_id}/members/list`). + +## Commands + +```bash +# Single page (default) +lark-cli im +chat-members-list --chat-id oc_xxx + +# Only users, or only bots +lark-cli im +chat-members-list --chat-id oc_xxx --member-types user +lark-cli im +chat-members-list --chat-id oc_xxx --member-types user,bot + +# Walk every page (capped by --page-limit; 0 = unlimited) +lark-cli im +chat-members-list --chat-id oc_xxx --page-all --page-limit 0 + +# Resume from a specific cursor (single page; --page-all is ignored) +lark-cli im +chat-members-list --chat-id oc_xxx --page-token "xxx" + +# JSON output / preview the request +lark-cli im +chat-members-list --chat-id oc_xxx --format json +lark-cli im +chat-members-list --chat-id oc_xxx --dry-run +``` + +## Parameters + +| Parameter | Required | Limits | Description | +|------|------|------|------| +| `--chat-id <id>` | Yes | `oc_xxx` | Target chat | +| `--member-types <strings>` | No | `user`, `bot` (comma-separated or repeated) | Member types to return. Omitted = all | +| `--member-id-type <type>` | No | `open_id` (default), `union_id`, `user_id` | ID type for `member_id` in the response | +| `--page-size <n>` | No | 1-100, default 20 | Results per page. With `--page-all` and no explicit `--page-size`, the max (100) is used automatically to minimize round-trips | +| `--page-token <token>` | No | - | Pagination cursor; **implies a single-page fetch** (disables auto-pagination) | +| `--page-all` | No | - | Automatically walk every page (capped by `--page-limit`) | +| `--page-limit <n>` | No | default 10, `0` = unlimited | Max pages to fetch with `--page-all` | +| `--page-delay <ms>` | No | default 200, `0` = no delay | Delay between pages during `--page-all` (throttle to avoid rate limits on large lists) | +| `--format json` | No | - | Output as JSON | +| `--dry-run` | No | - | Preview the request without executing it | + +> Supports both `--as user` (default) and `--as bot`. The caller must be in the target chat, and must belong to the same tenant for internal chats. + +## Output Fields + +| Field | Description | +|------|------| +| `chat_id` | The queried chat ID | +| `users` | Array of user members (`member_id`, `name`, `tenant_key`, …) | +| `bots` | Array of bot members (`member_id`, `app_id`, `name`, …) | +| `user_total` / `bot_total` | Server-reported totals for each bucket | +| `truncations` | Non-empty when the server **capped a bucket** due to security config — see below | +| `has_more` / `page_token` | Paging signals from the final page fetched | + +## Truncation: the result may be incomplete + +The server applies a security cap to large member lists. When a bucket is capped, the response carries a `truncations[]` entry (e.g. `[{"limit": 100, "member_type": "user"}]`) **on the final page only**. The shortcut surfaces this two ways so it is never missed: + +- **stderr**: `⚠️ member list truncated by server security config: user bucket capped at 100 — the list is INCOMPLETE.` +- **stdout JSON**: the `truncations` array is preserved verbatim in the output. + +A truncated result is *not* fixable by paging further — it is a server-side cap. Treat `users`/`bots` as a partial list whenever `truncations` is non-empty. + +## Pagination notes + +- Default fetches a single page. Pass `--page-all` to drain every page. +- With `--page-all` and no explicit `--page-size`, the shortcut uses the maximum page size (100) so a full walk takes the fewest round-trips. An explicit `--page-size` is always honored. +- `--page-all` sleeps `--page-delay` ms (default 200) between pages to avoid hammering the API when a tenant has no server-side member cap and the list spans many pages. Set `--page-delay 0` to disable. +- `--page-all` stops at `--page-limit` pages (default 10). When it stops early, `has_more` stays `true` so you know the result is incomplete; re-run with `--page-limit 0` for everything. +- `--page-token` and `--page-all` together: `--page-token` wins (single-page fetch from the supplied cursor); a stderr warning is emitted. +- Across pages, `users[]` and `bots[]` are concatenated; `truncations` / `has_more` / `page_token` come from the last page fetched. + +## Common Errors and Troubleshooting + +| Symptom | Root Cause | | Solution | +|---------|---------|---|---------| +| `--chat-id is required` | `--chat-id` omitted | | Provide the `oc_xxx` chat ID | +| `--page-size must be an integer between 1 and 100` | out of range | | Use 1-100 | +| `--member-types contains invalid value` | value other than `user`/`bot` | | Use `user`, `bot`, or both | +| Permission denied | missing `im:chat.members:read` | | Bot: enable the scope in the console. User: `lark-cli auth login --scope "im:chat.members:read"` | diff --git a/skills/lark-im/references/lark-im-messages-reply.md b/skills/lark-im/references/lark-im-messages-reply.md index 8872fdc70..a82f52080 100644 --- a/skills/lark-im/references/lark-im-messages-reply.md +++ b/skills/lark-im/references/lark-im-messages-reply.md @@ -155,6 +155,15 @@ lark-cli im +messages-reply --message-id om_xxx --text "Received" --idempotency- # Preview the request without executing it lark-cli im +messages-reply --message-id om_xxx --markdown $'## Test\n\nhello' --dry-run + +# ===== Interactive Card ===== +# 🚫 STOP — before constructing ANY interactive card JSON, you MUST read +# card/lark-im-card-create.md and follow its workflow. Do NOT +# hand-write or copy a card payload. The JSON passed to --content must be +# the OUTPUT of that workflow. This is non-negotiable. + +# Once the workflow has produced the card JSON, reply with it: +lark-cli im +messages-reply --message-id om_xxx --msg-type interactive --content '<card_json_from_workflow>' ``` ## Media Input Rules @@ -265,3 +274,4 @@ Card content is **not** normalized — use the card-native `<at>` syntax inside - `--as user` uses a user access token (UAT) and requires the `im:message.send_as_user` and `im:message` scopes; the reply is sent as the authorized end user - `--as bot` uses a tenant access token (TAT), and requires the `im:message:send_as_bot` scope - When using `--markdown` with images, pre-uploading via `images.create` to obtain an `image_key` is recommended for reliability; remote URLs may be auto-resolved at runtime, but if download/upload fails the image is removed with a warning; local paths are not supported +- **Interactive cards are gated:** you MUST read and follow the [`card/lark-im-card-create.md`](card/lark-im-card-create.md) workflow to produce the card JSON *before* replying. Do not hand-write or copy a card payload — the JSON given to `--msg-type interactive --content` must be the workflow's output. This applies every time, with no exception diff --git a/skills/lark-im/references/lark-im-messages-send.md b/skills/lark-im/references/lark-im-messages-send.md index 03aca1665..2215787d9 100644 --- a/skills/lark-im/references/lark-im-messages-send.md +++ b/skills/lark-im/references/lark-im-messages-send.md @@ -158,6 +158,15 @@ lark-cli im +messages-send --chat-id oc_xxx --text "Hello" --idempotency-key my- # Preview the request without executing it lark-cli im +messages-send --chat-id oc_xxx --markdown $'## Test\n\nhello' --dry-run + +# ===== Interactive Card ===== +# 🚫 STOP — before constructing ANY interactive card JSON, you MUST read +# card/lark-im-card-create.md and follow its workflow. Do NOT +# hand-write or copy a card payload from the examples below. The JSON passed +# to --content must be the OUTPUT of that workflow. This is non-negotiable. + +# Once the workflow has produced the card JSON, send it: +lark-cli im +messages-send --chat-id oc_xxx --msg-type interactive --content '<card_json_from_workflow>' ``` ## Media Input Rules @@ -213,7 +222,9 @@ lark-cli im +messages-send --chat-id oc_xxx --markdown $'## Test\n\nhello' --dry | `media` | `{"file_key":"file_xxx","image_key":"img_xxx"}` (video; `image_key` is the cover from `--video-cover` — **required**) | | `share_chat` | `{"chat_id":"oc_xxx"}` | | `share_user` | `{"user_id":"ou_xxx"}` | -| `interactive` | Card JSON (see Feishu interactive card documentation) | +| `interactive` | Card JSON — **MUST** be produced by the [`card/lark-im-card-create.md`](card/lark-im-card-create.md) workflow. Read it before writing any card; never hand-craft the JSON here | + +> **`post` vs `interactive`:** `post` is a static rich-text message (title, paragraphs, @mentions, links, inline images) — content is fixed once sent. `interactive` is a card with structured layout and UI components (buttons, forms, selects, date pickers, charts) — content can be updated after sending and supports user-action callbacks. Use `post` for read-only content; use `interactive` when the message needs user interaction or dynamic updates. `interactive` cards support callback events (`card.action.trigger`) — see [`lark-im-card-action-reply.md`](lark-im-card-action-reply.md). @@ -265,3 +276,4 @@ Card content is **not** normalized — use the card-native `<at>` syntax inside - `--as bot` uses a tenant access token (TAT) and requires the `im:message:send_as_bot` scope - When sending as a bot, the app must already be in the target group or already have a direct-message relationship with the target user - When using `--markdown` with images, pre-uploading via `images.create` to obtain an `image_key` is recommended for reliability; remote URLs may be auto-resolved at runtime, but if download/upload fails the image is removed with a warning; local paths are not supported +- **Interactive cards are gated:** you MUST read and follow the [`card/lark-im-card-create.md`](card/lark-im-card-create.md) workflow to produce the card JSON *before* sending. Do not hand-write or copy a card payload — the JSON given to `--msg-type interactive --content` must be the workflow's output. This applies every time, with no exception diff --git a/skills/lark-mail/SKILL.md b/skills/lark-mail/SKILL.md index 06ee7fc0b..38afb17f8 100644 --- a/skills/lark-mail/SKILL.md +++ b/skills/lark-mail/SKILL.md @@ -79,7 +79,7 @@ metadata: 1. `+triage --from spam@x.com` → 列出 N 条结果 2. 展示:"将删除 N 封邮件(发件人 spam@x.com,主题:…),确认?" -3. 用户确认后 → `*.batch_trash` +3. 用户确认后 → `+message-trash --message-ids ... --yes` ## 身份选择:优先使用 user 身份 @@ -96,13 +96,14 @@ metadata: 1. **确认身份** — 首次操作邮箱前先调用 `lark-cli mail user_mailboxes profile --params '{"user_mailbox_id":"me"}'` 获取当前用户的真实邮箱地址(`primary_email_address`),不要通过系统用户名猜测。后续判断"发件人是否为用户本人"时以此地址为准。 2. **浏览** — `+triage` 查看收件箱摘要,获取 `message_id` / `thread_id` 3. **阅读** — `+message` 只读单封邮件;已有多个 `message_id` 时用 `+messages` 批量读取,不要循环调用 `+message`;`+thread` 读整个会话 -4. **回复** — `+reply` / `+reply-all`(默认存草稿,加 `--confirm-send` 则立即发送) -5. **转发** — `+forward`(默认存草稿,加 `--confirm-send` 则立即发送) -6. **新邮件** — `+send` 存草稿(默认),加 `--confirm-send` 发送 -7. **HTML body 预检(可选)** — 复杂 HTML body 提交前可先跑 `+lint-html` 看 lint 会改 / 删什么;写信路径(`+send` / `+draft-create` / `+reply` / `+reply-all` / `+forward` / `+draft-edit` body op)已内置 autofix,普通正文不必先跑。详见 [references/lark-mail-html.md](references/lark-mail-html.md) 中的「写入路径内置 HTML lint」章节 -8. **确认投递** — 立即发送后用 `send_status` 查询投递状态,定时发送后在预定时间后再查询;取消定时发送用 `cancel_scheduled_send` -9. **编辑草稿** — `+draft-edit` 修改已有草稿。正文编辑通过 `--patch-file`:回复/转发草稿用 `set_reply_body` op 保留引用区,普通草稿用 `set_body` op -10. **已读回执** — +4. **整理** — 标签、已读/未读状态和移动文件夹优先用 `+message-modify`;软删除优先用 `+message-trash` +5. **回复** — `+reply` / `+reply-all`(默认存草稿,加 `--confirm-send` 则立即发送) +6. **转发** — `+forward`(默认存草稿,加 `--confirm-send` 则立即发送) +7. **新邮件** — `+send` 存草稿(默认),加 `--confirm-send` 发送 +8. **HTML body 预检(可选)** — 复杂 HTML body 提交前可先跑 `+lint-html` 看 lint 会改 / 删什么;写信路径(`+send` / `+draft-create` / `+reply` / `+reply-all` / `+forward` / `+draft-edit` body op)已内置 autofix,普通正文不必先跑。详见 [references/lark-mail-html.md](references/lark-mail-html.md) 中的「写入路径内置 HTML lint」章节 +9. **确认投递** — 立即发送后用 `send_status` 查询投递状态,定时发送后在预定时间后再查询;取消定时发送用 `cancel_scheduled_send` +10. **编辑草稿** — `+draft-edit` 修改已有草稿。正文编辑通过 `--patch-file`:回复/转发草稿用 `set_reply_body` op 保留引用区,普通草稿用 `set_body` op +11. **已读回执** — - **请求回执(写信侧)**:`--request-receipt` 仅在**用户显式要求**时添加,**不要从 subject / body 内容推断意图**。 - **响应回执(拉信侧)**:拉信看到 `label_ids` 含 `READ_RECEIPT_REQUEST`(或 `-607`)时,**必须先问用户**是否回执(不要自动回执,涉及隐私)。用户同意 → `+send-receipt` 响应;用户不同意但想消掉提示 → `+decline-receipt` 只清本地标签、不发邮件。 @@ -119,6 +120,8 @@ metadata: - 查看发送邮件后的投递状态:发送成功后查看邮件投递状态;也覆盖发送拦截。ref: [lark-mail-send-status](references/lark-mail-send-status.md) - 使用邮件模板:区分个人模板和静态 HTML 模板,发信类 shortcut 用 `--template-id` 套用模板。ref: [lark-mail-template](references/lark-mail-template.md) - 撤回已发送邮件:撤回邮件并查询异步撤回状态。ref: [lark-mail-recall](references/lark-mail-recall.md) +- 修改邮件标签/已读状态/文件夹:优先使用 `+message-modify`。ref: [`+message-modify`](references/lark-mail-message-modify.md) +- 软删除邮件:优先使用 `+message-trash`。ref: [`+message-trash`](references/lark-mail-message-trash.md) - 收信规则:创建、验证、删除自动处理收到邮件的规则。ref: [lark-mail-rules](references/lark-mail-rules.md) - 分享邮件到 IM:分享邮件或会话到群聊、个人会话。ref: [lark-mail-share-to-chat](references/lark-mail-share-to-chat.md) - 发送日程邀请邮件:在邮件中嵌入 `text/calendar` 日程邀请。ref: [lark-mail-calendar-invite](references/lark-mail-calendar-invite.md) @@ -192,7 +195,7 @@ lark-cli mail +messages --message-ids <id1>,<id2>,<id3> --html=false ## 原生 API 调用规则 -没有 Shortcut 覆盖的操作才使用原生 API。调用步骤以本节为准;资源和 method 用 `lark-cli mail -h` / `lark-cli mail <resource> -h` 发现,不在入口保留完整资源表。 +没有 Shortcut 覆盖的操作才使用原生 API。标签、已读状态、移动文件夹优先使用 `+message-modify`;软删除优先使用 `+message-trash`。调用步骤以本节为准;资源和 method 用 `lark-cli mail -h` / `lark-cli mail <resource> -h` 发现,不在入口保留完整资源表。 ### Step 1 — 用 `-h` 确定要调用的 API(必须,不可跳过) diff --git a/skills/lark-mail/references/lark-mail-forward.md b/skills/lark-mail/references/lark-mail-forward.md index 3bf35358e..6a75cb9c8 100644 --- a/skills/lark-mail/references/lark-mail-forward.md +++ b/skills/lark-mail/references/lark-mail-forward.md @@ -215,7 +215,7 @@ lark-cli mail user_mailbox.drafts cancel_scheduled_send --params '{"user_mailbox **2. 标记已读**(可选)— 询问用户是否需要将原邮件标记为已读。如果用户同意: ```bash -lark-cli mail user_mailbox.messages batch_modify --params '{"user_mailbox_id":"me"}' --data '{"message_ids":["<原邮件ID>"],"remove_label_ids":["UNREAD"]}' +lark-cli mail +message-modify --message-ids <原邮件ID> --remove-label-ids UNREAD ``` ## 编辑转发草稿 diff --git a/skills/lark-mail/references/lark-mail-message-modify.md b/skills/lark-mail/references/lark-mail-message-modify.md new file mode 100644 index 000000000..ba02a27c5 --- /dev/null +++ b/skills/lark-mail/references/lark-mail-message-modify.md @@ -0,0 +1,48 @@ +# mail +message-modify + +`mail +message-modify` is the preferred shortcut for changing labels, read-state labels, or folder placement on existing messages. + +Use it instead of raw `user_mailbox.messages batch_modify` when the operation targets concrete `message_id` values from `+triage`, `+message`, or `+messages`. + +## Common Commands + +```bash +lark-cli mail +message-modify --message-ids <id1>,<id2> --add-label-ids unread +lark-cli mail +message-modify --message-ids <id> --remove-label-ids FLAGGED +lark-cli mail +message-modify --message-ids <id> --add-folder archive +lark-cli mail +message-modify --mailbox shared@example.com --message-ids <id> --add-folder folder_xxx +lark-cli mail +message-modify --message-ids <id> --add-label-ids custom_label_id --dry-run +``` + +## Flags + +| Flag | Required | Notes | +| --- | --- | --- | +| `--mailbox` | No | Mailbox that owns the messages. Defaults to `me`. | +| `--message-ids` | Yes | `string_array`; supports comma-separated values and repeated flags. | +| `--add-label-ids` | No | Adds labels. System labels `unread`, `important`, `other`, `flagged` normalize to upper case. | +| `--remove-label-ids` | No | Removes labels. Cannot overlap with `--add-label-ids`. | +| `--add-folder` | No | Moves to one folder. `inbox`, `sent`, `spam`, `archive`, `archived` normalize to system folder IDs. | + +`TRASH` is intentionally rejected by this shortcut. Use `mail +message-trash --message-ids <id> --yes` for soft deletion. + +## Behavior + +- Message IDs are locally validated, de-duplicated in first-seen order, and sent in batches of 20. +- Custom label IDs are checked with `labels.get`; custom folder IDs are checked with `folders.get`. +- If no label or folder operation is requested, the command succeeds locally, emits all message IDs as `success_message_ids`, and makes no POST request. +- Single batch POST failures mark every message in that batch with the same failure reason; later batches still run. +- JSON output is intentionally compact: + +```json +{ + "success_message_ids": ["id1"], + "failed_message_ids": [ + {"message_id": "id2", "reason": "api error"} + ] +} +``` + +## When Raw API Is Still Appropriate + +Use raw `mail user_mailbox.messages batch_modify` only when you need a request shape that the shortcut intentionally does not expose, or when reproducing backend/API behavior exactly for diagnostics. diff --git a/skills/lark-mail/references/lark-mail-message-trash.md b/skills/lark-mail/references/lark-mail-message-trash.md new file mode 100644 index 000000000..225ad2288 --- /dev/null +++ b/skills/lark-mail/references/lark-mail-message-trash.md @@ -0,0 +1,41 @@ +# mail +message-trash + +`mail +message-trash` is the preferred shortcut for soft-deleting existing messages. + +Use it after obtaining real `message_id` values from `+triage`, `+message`, or `+messages`, and after the user has confirmed the deletion preview. + +## Common Commands + +```bash +lark-cli mail +message-trash --message-ids <id1>,<id2> --yes +lark-cli mail +message-trash --mailbox shared@example.com --message-ids <id> --yes +lark-cli mail +message-trash --message-ids <id1> --message-ids <id2> --dry-run +``` + +## Flags + +| Flag | Required | Notes | +| --- | --- | --- | +| `--mailbox` | No | Mailbox that owns the messages. Defaults to `me`. | +| `--message-ids` | Yes | `string_array`; supports comma-separated values and repeated flags. | +| `--yes` | Yes for execution | Required by the high-risk write confirmation framework. | + +## Behavior + +- Message IDs are locally validated, de-duplicated in first-seen order, and sent in batches of 20. +- The shortcut calls `POST /open-apis/mail/v1/user_mailboxes/<mailbox>/messages/batch_trash` sequentially. +- Single batch POST failures mark every message in that batch with the same failure reason; later batches still run. +- JSON output is intentionally compact: + +```json +{ + "success_message_ids": ["id1"], + "failed_message_ids": [ + {"message_id": "id2", "reason": "api error"} + ] +} +``` + +## When Raw API Is Still Appropriate + +Use raw `mail user_mailbox.messages batch_trash` only when reproducing backend/API behavior exactly for diagnostics. For normal soft deletion, prefer this shortcut because it handles validation, batching, compact output, and `--yes` confirmation consistently. diff --git a/skills/lark-mail/references/lark-mail-reply-all.md b/skills/lark-mail/references/lark-mail-reply-all.md index 1819296d6..fd5cdf077 100644 --- a/skills/lark-mail/references/lark-mail-reply-all.md +++ b/skills/lark-mail/references/lark-mail-reply-all.md @@ -203,7 +203,7 @@ lark-cli mail user_mailbox.drafts cancel_scheduled_send --params '{"user_mailbox **2. 标记已读**(可选)— 询问用户是否需要将原邮件标记为已读。如果用户同意: ```bash -lark-cli mail user_mailbox.messages batch_modify --params '{"user_mailbox_id":"me"}' --data '{"message_ids":["<原邮件ID>"],"remove_label_ids":["UNREAD"]}' +lark-cli mail +message-modify --message-ids <原邮件ID> --remove-label-ids UNREAD ``` ## 相关命令 diff --git a/skills/lark-mail/references/lark-mail-reply.md b/skills/lark-mail/references/lark-mail-reply.md index 9290b5f1a..712b592f2 100644 --- a/skills/lark-mail/references/lark-mail-reply.md +++ b/skills/lark-mail/references/lark-mail-reply.md @@ -218,7 +218,7 @@ lark-cli mail user_mailbox.drafts cancel_scheduled_send --params '{"user_mailbox **2. 标记已读**(可选)— 询问用户是否需要将原邮件标记为已读。如果用户同意: ```bash -lark-cli mail user_mailbox.messages batch_modify --params '{"user_mailbox_id":"me"}' --data '{"message_ids":["<原邮件ID>"],"remove_label_ids":["UNREAD"]}' +lark-cli mail +message-modify --message-ids <原邮件ID> --remove-label-ids UNREAD ``` ## 编辑回复草稿 diff --git a/skills/lark-markdown/SKILL.md b/skills/lark-markdown/SKILL.md index c6a8e6ef3..e78bfb7ac 100644 --- a/skills/lark-markdown/SKILL.md +++ b/skills/lark-markdown/SKILL.md @@ -1,6 +1,6 @@ --- name: lark-markdown -version: 1.2.1 +version: 1.2.2 description: "飞书 Markdown:查看、创建、上传、编辑和比较 Markdown 文件。当用户需要创建或编辑 Markdown 文件、读取、修改、局部 patch 或比较差异时使用。不负责将 Markdown 导入为飞书在线文档,也不负责文件搜索、权限、评论、移动、删除等云空间管理操作。" metadata: requires: @@ -25,7 +25,8 @@ metadata: - 用户要先拿 Markdown 文件的历史版本号,再做比较/下载/回滚,先用 [`lark-drive`](../lark-drive/SKILL.md) 的 `lark-cli drive +version-history` - 用户要把本地 Markdown **导入成在线新版文档(docx)**,不要用本 skill,改用 [`lark-drive`](../lark-drive/SKILL.md) 的 `lark-cli drive +import --type docx` - 用户要对 Markdown 文件做**rename / move / delete / 搜索 / 权限 / 评论**等云空间(云盘/云存储)操作,不要留在本 skill,切到 [`lark-drive`](../lark-drive/SKILL.md) -- `markdown +create` / `+overwrite` 命中 `missing scope`、`permission denied`、`not found`、`version limit` 时,默认停止重试并按报错 hint 处理;只有 `rate limit` 或临时网络错误才做有限重试。 +- `markdown +create` / `+overwrite` 命中 `missing scope`、`permission denied`、`not found`、`quota_exceeded`、`version limit` 时,默认停止重试并按报错 hint 处理;只有 `rate_limit`、`server_error` 或临时网络错误才做有限退避重试。 +- `markdown +create` 的目标参数不要猜:Drive 文件夹用 `--folder-token`,Wiki 节点用 `--wiki-token`。如果用户给的是 URL,可以直接传完整 URL;CLI 会归一成 token。不要把 doc/sheet/wiki URL 放进 `--folder-token` 试错。 ## 核心边界 diff --git a/skills/lark-markdown/references/lark-markdown-create.md b/skills/lark-markdown/references/lark-markdown-create.md index c03f89b35..3b76da3bd 100644 --- a/skills/lark-markdown/references/lark-markdown-create.md +++ b/skills/lark-markdown/references/lark-markdown-create.md @@ -32,11 +32,21 @@ lark-cli markdown +create \ --folder-token fldcn_xxx \ --file ./README.md +# 创建到指定文件夹(可直接传 Drive folder URL) +lark-cli markdown +create \ + --folder-token "https://feishu.cn/drive/folder/fldcn_xxx" \ + --file ./README.md + # 创建到指定 wiki 节点 lark-cli markdown +create \ --wiki-token wikcn_xxx \ --file ./README.md +# 创建到指定 wiki 节点(可直接传 wiki URL) +lark-cli markdown +create \ + --wiki-token "https://feishu.cn/wiki/wikcn_xxx" \ + --file ./README.md + # 预览底层请求 lark-cli markdown +create \ --name README.md \ @@ -48,8 +58,8 @@ lark-cli markdown +create \ | 参数 | 必填 | 说明 | |------|------|------| -| `--folder-token` | 否 | 目标 Drive 文件夹 token;与 `--wiki-token` 互斥;省略时创建到根目录 | -| `--wiki-token` | 否 | 目标 wiki 节点 token;与 `--folder-token` 互斥;传入后自动映射为 `parent_type=wiki` | +| `--folder-token` | 否 | 目标 Drive 文件夹 token 或 Drive folder URL;与 `--wiki-token` 互斥;省略时创建到根目录 | +| `--wiki-token` | 否 | 目标 wiki 节点 token 或 wiki URL;与 `--folder-token` 互斥;传入后自动映射为 `parent_type=wiki` | | `--name` | 条件必填 | 文件名,**必须显式带 `.md` 后缀**;使用 `--content` 时必填;使用 `--file` 时可省略,默认取本地文件名 | | `--content` | 条件必填 | Markdown 内容;与 `--file` 互斥;支持直接传字符串、`@file`、`-`(stdin) | | `--file` | 条件必填 | 本地 `.md` 文件路径;与 `--content` 互斥 | @@ -58,6 +68,8 @@ lark-cli markdown +create \ - `--content` 与 `--file` 必须二选一 - `--folder-token` 与 `--wiki-token` 互斥 +- `--folder-token` 只能是 Drive 文件夹;不要传 wiki/doc/sheet/base/file token 或 URL +- `--wiki-token` 只能是 Wiki 节点;如果只有 docx/sheet/base 等文档 URL,先用 `lark-cli wiki +node-get --node-token <url>` 解析出 `node_token` - `--name` 必须带 `.md` 后缀 - `--file` 指向的本地文件名也必须带 `.md` 后缀 - 传 `--wiki-token` 时,返回值中不会附带 `/file/<token>` URL,因为 wiki 承载文件没有稳定的独立 file URL @@ -88,6 +100,14 @@ lark-cli markdown +create \ > > **不要擅自执行 owner 转移。** 如果用户需要把 owner 转给自己,必须单独确认。 +## 失败处理 + +- `not_found` / `1061044`:父目录或 wiki 节点不存在,或 token 类型放错参数。修正 `--folder-token` / `--wiki-token` 后再试,不要重复提交同一参数。 +- `quota_exceeded` / `1061101`:目标存储空间配额已满。释放空间、换父目录/节点或请管理员扩容后再试。 +- `permission_denied` / `missing_scope`:区分身份处理。`--as user` 看用户授权和目标 ACL;`--as bot` 看应用 scope 与目标目录/节点 ACL。 +- `rate_limit`:停止立即重试,使用退避。 +- `server_error` / `233523001`:可以稍后有限重试;若重复出现,保留 `log_id` / request id 给服务端排查。 + ## 参考 - [lark-markdown](../SKILL.md) — Markdown 域总览 diff --git a/skills/lark-minutes/references/lark-minutes-download.md b/skills/lark-minutes/references/lark-minutes-download.md index b2bac61f7..7b8de1697 100644 --- a/skills/lark-minutes/references/lark-minutes-download.md +++ b/skills/lark-minutes/references/lark-minutes-download.md @@ -1,7 +1,6 @@ # minutes +download -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 下载妙记的音视频媒体文件到本地,或获取有效期 1 天的下载链接。只读操作。 @@ -134,4 +133,3 @@ API 限流 5 次/秒,批量下载时需注意控制频率。 - [lark-minutes](../SKILL.md) — 妙记全部命令 - [lark-minutes-detail](lark-minutes-detail.md) — 妙记详情与 AI 产物查询 -- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/lark-minutes/references/lark-minutes-search.md b/skills/lark-minutes/references/lark-minutes-search.md index ecbd4ce07..05d3b4904 100644 --- a/skills/lark-minutes/references/lark-minutes-search.md +++ b/skills/lark-minutes/references/lark-minutes-search.md @@ -1,6 +1,5 @@ # minutes +search -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 搜索妙记列表,支持关键词、所有者、参与者以及时间范围等多条件过滤。所有者与参与者都支持传入多个 open\_id,也支持传入 `me` 表示当前用户。只读操作,不修改任何妙记数据。 @@ -199,6 +198,5 @@ lark-cli minutes +detail --minute-tokens <minute_token> --summary - [lark-minutes](../SKILL.md) -- 妙记相关命令 - [lark-minutes-detail](lark-minutes-detail.md) -- 基于 `minute_token` 获取逐字稿、总结、待办、章节等产物 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 - [lark-vc](../../lark-vc/SKILL.md) -- 视频会议全部命令 diff --git a/skills/lark-minutes/references/lark-minutes-speaker-replace.md b/skills/lark-minutes/references/lark-minutes-speaker-replace.md index a3e94ec78..82492ac13 100644 --- a/skills/lark-minutes/references/lark-minutes-speaker-replace.md +++ b/skills/lark-minutes/references/lark-minutes-speaker-replace.md @@ -1,6 +1,5 @@ # minutes +speaker-replace -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 替换妙记逐字稿中的说话人身份:把妙记逐字稿里"原说话人"对应的所有发言段,重新归属到"新说话人"。常用于解决妙记自动识别错说话人,或需要把外部/非飞书说话人改绑到正确飞书用户的场景。 @@ -81,6 +80,8 @@ lark-cli minutes +speaker-replace \ Agent 必须先 `lark-cli api GET .../speakerlist`,再 `+speaker-replace`;`--from-speaker-id` 只接受 `speaker_id`。 +`+speaker-replace` **不会**自己请求 speakerlist:`--from-speaker-id` 的值会原样发给替换接口。整条链路只在 Agent 一开始查一次 speakerlist,务必传入上一步拿到的 `speaker_id`(不要传展示名,否则替换接口会返回 speaker-not-found)。 + ### 2. 新说话人必须是 open_id `--to-user-id` 仅支持 `ou_` 开头的 open_id,**不支持直接传姓名**;如果用户只给了姓名,请先用 [lark-contact](../../lark-contact/SKILL.md) 把姓名解析成 `open_id`。 @@ -104,4 +105,3 @@ Agent 必须先 `lark-cli api GET .../speakerlist`,再 `+speaker-replace`;`- ## 参考 - [lark-minutes](../SKILL.md) -- 妙记相关功能说明 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 diff --git a/skills/lark-minutes/references/lark-minutes-summary.md b/skills/lark-minutes/references/lark-minutes-summary.md index a1fd8e8d3..29b03d397 100644 --- a/skills/lark-minutes/references/lark-minutes-summary.md +++ b/skills/lark-minutes/references/lark-minutes-summary.md @@ -1,6 +1,5 @@ # minutes +summary -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 替换妙记的 AI 总结内容。写操作,会覆盖当前总结。 @@ -119,4 +118,3 @@ lark-cli minutes +summary --minute-token obcnxxxxxxxxxxxxxxxxxxxx --summary @sum - [lark-minutes](../SKILL.md) — 妙记全部命令 - [minutes +todo](lark-minutes-todo.md) — 替换待办项 - [minutes +detail](lark-minutes-detail.md) — 读取总结、待办等 AI 产物 -- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/lark-minutes/references/lark-minutes-todo.md b/skills/lark-minutes/references/lark-minutes-todo.md index de98c75d8..d86bcd6d6 100644 --- a/skills/lark-minutes/references/lark-minutes-todo.md +++ b/skills/lark-minutes/references/lark-minutes-todo.md @@ -2,7 +2,6 @@ > **路由**:本命令操作**妙记内的 AI 待办**,不是飞书任务(Task)。用户说「在妙记里新建待办」时**必须**用本命令,**禁止**走 `lark-cli task` / `tasklists list` / `task +create`。详见 [lark-minutes/SKILL.md](../SKILL.md) 第 6 节。 -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 对妙记中的待办做新增 / 更新 / 删除(单条或批量)。写操作。 @@ -135,4 +134,3 @@ lark-cli minutes +todo --minute-token obcnxxxxxxxxxxxxxxxxxxxx --operation add - - [lark-minutes](../SKILL.md) - [minutes +summary](lark-minutes-summary.md) - [minutes +detail](lark-minutes-detail.md) -- [lark-shared](../../lark-shared/SKILL.md) diff --git a/skills/lark-minutes/references/lark-minutes-update.md b/skills/lark-minutes/references/lark-minutes-update.md index 780066093..7baa2948d 100644 --- a/skills/lark-minutes/references/lark-minutes-update.md +++ b/skills/lark-minutes/references/lark-minutes-update.md @@ -1,6 +1,5 @@ # minutes +update -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 修改飞书妙记的标题(topic)。 @@ -38,4 +37,3 @@ lark-cli minutes +update --minute-token xxx --topic "周会纪要 2026-05-18" ## 参考 - [lark-minutes](../SKILL.md) -- 妙记相关功能说明 -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 diff --git a/skills/lark-minutes/references/lark-minutes-upload.md b/skills/lark-minutes/references/lark-minutes-upload.md index 0142df6d8..29c96107b 100644 --- a/skills/lark-minutes/references/lark-minutes-upload.md +++ b/skills/lark-minutes/references/lark-minutes-upload.md @@ -1,6 +1,5 @@ # minutes +upload -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 上传音视频文件到飞书妙记并生成妙记(Minute)。 @@ -31,12 +30,12 @@ ``` - 命令执行成功后,将返回生成的妙记链接 `minute_url`。 -3. **如需纪要 / 逐字稿 / 文字稿 / 撰写文字,继续提取 `minute_token` 调用 `minutes +detail`** - - 从返回的 `minute_url` 中提取路径最后一段,得到 `minute_token`。 - - 如果用户要的是纪要、逐字稿、文字稿、撰写文字、总结、待办或章节,继续调用: +3. **如需纪要 / 逐字稿 / 文字稿 / 撰写文字,使用返回的 `minute_token` 调用 `minutes +detail`** + - 如果用户要的是纪要、逐字稿、文字稿、撰写文字、总结、待办或章节,使用上一步返回的 `minute_token` 继续调用: ```bash - lark-cli minutes +detail --minute-tokens <minute_token> --summary --todo --chapter --keyword --transcript + lark-cli minutes +detail --minute-tokens <minute_token> --wait-ready --summary --todo --chapter --keyword --transcript ``` + - `--wait-ready` 参数表示等待妙记生成完毕后再获取产物,上传后立即读取详情时必须加上此参数。 - `minutes +detail --minute-tokens` 会返回妙记产物(总结、待办、章节、关键词、逐字稿);必要时还会把逐字稿落地到本地文件。 > **异步生成提示**:API 会立即返回 `minute_url`,但妙记可能仍在异步生成中,您可以直接通过该妙记链接查看当前的处理状态和转写结果。 @@ -47,8 +46,8 @@ # 通过已上传到云空间(云盘/云存储)的 file_token 生成妙记 lark-cli minutes +upload --file-token boxcnxxxxxxxxxxxxxxxx -# 通过 minute_token 继续获取妙记产物(--summary --todo --chapter --keyword --transcript 按需传入) -lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxx --summary +# 上传后立即获取妙记产物,需加 --wait-ready 等待生成完毕(--summary --todo --chapter --keyword --transcript 按需传入) +lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxx --wait-ready --summary ``` ## 参数 @@ -81,7 +80,7 @@ lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxx --summary 1. 使用 `lark-cli drive +upload --file <path>` 上传本地音视频文件到云空间(云盘/云存储) 2. 从返回结果中取出 `file_token` 3. 调用 `lark-cli minutes +upload --file-token <file_token>` 生成妙记 -4. 如果目标是纪要、逐字稿、文字稿、撰写文字、总结、待办或章节,再从 `minute_url` 提取 `minute_token`,继续调用 `lark-cli minutes +detail --minute-tokens <minute_token>` +4. 如果目标是纪要、逐字稿、文字稿、撰写文字、总结、待办或章节,使用返回的 `minute_token`,继续调用 `lark-cli minutes +detail --minute-tokens <minute_token> --wait-ready` > **边界说明**:`minutes +upload` 本身只负责把文件转成妙记并返回 `minute_url`。纪要内容、逐字稿、文字稿、撰写文字、总结、待办、章节属于后续产物获取,应由 [minutes +detail](lark-minutes-detail.md) 承接。 @@ -89,16 +88,17 @@ lark-cli minutes +detail --minute-tokens obcnxxxxxxxxxxxxxxxx --summary ```json { - "minute_url": "http(s)://<host>/minutes/<minute-token>" + "minute_url": "http(s)://<host>/minutes/<minute-token>", + "minute_token": "<minute-token>" } ``` | 字段 | 说明 | |------|------| | `minute_url` | 生成的妙记访问链接 | +| `minute_token` | 从 `minute_url` 提取出的妙记 Token,可直接传给 `minutes +detail --minute-tokens` | ## 参考 - [lark-minutes](../SKILL.md) -- 妙记相关功能说明 - [drive +upload](../../lark-drive/references/lark-drive-upload.md) -- 上传文件到云空间(云盘/云存储) -- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 diff --git a/skills/lark-okr/SKILL.md b/skills/lark-okr/SKILL.md index 8d02fd4d8..4c59768ea 100644 --- a/skills/lark-okr/SKILL.md +++ b/skills/lark-okr/SKILL.md @@ -31,12 +31,13 @@ Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`) | [`+batch-create`](references/lark-okr-batch-create.md) | 批量创建 Objective 和 KR | | [`+reorder`](references/lark-okr-reorder.md) | 调整 Objective 或 KR 的顺位 | | [`+weight`](references/lark-okr-weight.md) | 调整 Objective 或 KR 的权重 | -| [`+indicator-update`](references/lark-okr-indicator-update.md) | 更新 Objective 或 KR 的指标当前值 | +| [`+indicator-update`](references/lark-okr-indicator-update.md) | 更新 Objective 或 KR 的指标当前值(简单场景推荐)。更复杂的指标操作见 [量化指标管理](references/lark-okr-indicators.md) | +| [`+patch`](references/lark-okr-patch.md) | 部分更新 Objective 或 KR(content、notes、score、deadline) | ## 格式说明 - [`OKR 业务实体`](references/lark-okr-entities.md) 获取 OKR 实体结构,定义和关系,帮助你更好的使用 OKR 功能 -- [`ContentBlock 富文本格式`](references/lark-okr-contentblock.md) — Objective/KeyResult/Progress 中 Content/Note 字段使用的富文本格式说明 +- [`ContentBlock 富文本格式`](references/lark-okr-contentblock.md) — Objective/KeyResult/Progress 中 Content/Note 字段使用的富文本格式说明,以及简化的半纯文本(SemiPlainContent)格式的进一步说明。 - **强烈建议** 在操作 OKR 前,阅读[`OKR 业务实体`](references/lark-okr-entities.md)以了解基础概念 ## API Resources @@ -46,6 +47,8 @@ Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`) - `delete` — 删除对齐关系 - `get` — 获取对齐关系 +> **操作指南:** [OKR 对齐关系管理](references/lark-okr-alignments.md) 包含 list/create/delete 完整工作流 + ### categories - `list` — 批量获取分类 @@ -71,6 +74,8 @@ Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`) - `patch` — 更新量化指标 +> **操作指南:** [OKR 量化指标管理](references/lark-okr-indicators.md) 包含目标/KR 指标查询和 patch 更新完整工作流 + ### key_results - `delete` — 删除关键结果 @@ -81,6 +86,8 @@ Shortcut 是对常用操作的高级封装(`lark-cli okr +<verb> [flags]`) - `list` — 获取关键结果的量化指标 +> **操作指南:** [OKR 量化指标管理](references/lark-okr-indicators.md) + ### objectives - `delete` — 删除目标 diff --git a/skills/lark-okr/references/lark-okr-alignments.md b/skills/lark-okr/references/lark-okr-alignments.md new file mode 100644 index 000000000..bcdc3728e --- /dev/null +++ b/skills/lark-okr/references/lark-okr-alignments.md @@ -0,0 +1,180 @@ +# OKR 对齐关系管理 + +> **前置条件:** 先阅读 [`lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 + +管理 OKR 目标之间的对齐关系,包括查询、创建和删除对齐。 + +## 对齐关系说明 + +OKR 对齐关系表示两个目标之间的关联: +- **对齐(aligning)**:目标 A 对齐到目标 B,表示 A 的完成有助于 B 的完成 +- **被对齐(aligned)**:目标 B 被目标 A 对齐 + +每个对齐关系有唯一的 `alignment_id`,用于删除操作。 + +--- + +## 一、查询对齐关系 + +### 命令 + +```bash +lark-cli okr objective.alignments list --objective-id "<目标ID>" [flags] +``` + +### 常用示例 + +```bash +# 获取目标的所有对齐关系(同时包含对齐和被对齐) +lark-cli okr objective.alignments list \ + --objective-id "7652569715131075772" + +# 只查询该目标主动对齐他人的关系 +lark-cli okr objective.alignments list \ + --objective-id "7652569715131075772" \ + --align-type "aligning" + +# 只查询他人对齐该目标的关系 +lark-cli okr objective.alignments list \ + --objective-id "7652569715131075772" \ + --align-type "aligned" + +# 自动分页获取全部数据 +lark-cli okr objective.alignments list \ + --objective-id "7652569715131075772" \ + --page-all +``` + +### 参数 + +| 参数 | 必填 | 默认值 | 说明 | +|----------------------|----|----------------|--------------------------------------------------------------------| +| `--objective-id` | 是 | — | 目标 ID | +| `--align-type` | 否 | — | 对齐类型:`aligning`(该目标对齐他人)\| `aligned`(他人对齐该目标)。留空返回全部。 | +| `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | +| `--page-size` | 否 | `10` | 分页大小,最大 100 | +| `--page-all` | 否 | — | 自动分页获取全部数据 | + +### 返回字段说明 + +- `items[].id`:对齐关系 ID(删除时需要) +- `items[].from_entity_id`:发起对齐的目标 ID +- `items[].to_entity_id`:被对齐的目标 ID +- `items[].from_owner` / `to_owner`:双方所有者信息 + +--- + +## 二、创建对齐关系 + +### 命令 + +```bash +lark-cli okr objective.alignments create --objective-id "<发起对齐的目标ID>" --data '<JSON>' +``` + +### 常用示例 + +```bash +# 创建对齐关系:目标 7652569715131075772 对齐到目标 7652569715131075773 +lark-cli okr objective.alignments create \ + --objective-id "7652569715131075772" \ + --data '{"to_entity_id":"7652569715131075773","to_entity_type":2}' + +# 从文件读取请求体 +lark-cli okr objective.alignments create \ + --objective-id "7652569715131075772" \ + --data @alignment.json +``` + +### 参数 + +| 参数 | 必填 | 说明 | +|------------------|----|--------------------------------------------------------------------| +| `--objective-id` | 是 | 发起对齐的目标 ID("我"的目标) | +| `--data` | 是 | JSON 请求体,格式见下方。支持 `@文件路径` 从文件读取。 | + +### 请求体格式 + +```json +{ + "to_entity_id": "7652569715131075773", // 被对齐的目标 ID + "to_entity_type": 2 // 固定值 2,表示目标类型 +} +``` + +### 对齐规则 + +- **禁止自对齐**:不能自己对齐自己 +- **周期时间重叠**:两个目标所在周期的时间范围必须有重叠 +- **权限要求**:需要对发起对齐的目标有编辑权限 + +### 返回 + +成功后返回 `alignment_id`,保存好以便后续删除。 + +--- + +## 三、删除对齐关系 + +### 命令 + +```bash +lark-cli okr alignments delete --alignment-id "<对齐关系ID>" +``` + +### 常用示例 + +```bash +# 删除指定的对齐关系 +lark-cli okr alignments delete \ + --alignment-id "7652569715131075780" +``` + +### 参数 + +| 参数 | 必填 | 说明 | +|------------------|----|--------------------------------------| +| `--alignment-id` | 是 | 对齐关系 ID(从 list 或 create 返回) | + +### 注意事项 + +- 删除操作不可逆,请谨慎操作 +- 需要对关联的目标有编辑权限 + +--- + +## 完整工作流示例 + +### 场景:将目标 A 对齐到目标 B + +1. **查询现有对齐关系**(确认是否已存在) + ```bash + lark-cli okr objective.alignments list \ + --objective-id "目标A的ID" \ + --align-type "aligning" + ``` + +2. **创建对齐关系** + ```bash + lark-cli okr objective.alignments create \ + --objective-id "目标A的ID" \ + --data '{"to_entity_id":"目标B的ID","to_entity_type":2}' + ``` + +3. **验证对齐结果** + ```bash + lark-cli okr objective.alignments list \ + --objective-id "目标A的ID" \ + --align-type "aligning" + ``` + +4. **(如需)删除对齐关系** + ```bash + lark-cli okr alignments delete \ + --alignment-id "从步骤1返回的alignment_id" + ``` + +## 参考 + +- [lark-okr](../SKILL.md) -- 所有 OKR 命令 +- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 diff --git a/skills/lark-okr/references/lark-okr-contentblock.md b/skills/lark-okr/references/lark-okr-contentblock.md index 9c60bccd4..310a42eb1 100644 --- a/skills/lark-okr/references/lark-okr-contentblock.md +++ b/skills/lark-okr/references/lark-okr-contentblock.md @@ -2,6 +2,17 @@ OKR 的 Objective、KeyResult 中的 content/notes 字段使用 `ContentBlock` 富文本格式。本文档描述其结构和使用方式。 +## 两种输入输出风格 + +OKR shortcuts 支持 `--style` 标志控制 content/notes 字段的输入输出格式: + +| `--style` 值 | 说明 | 适用场景 | +|--------------|--------------------------------------------------------------------|--------------------------| +| `simple`(默认) | 半纯文本格式 `SemiPlainContent`,简化的 JSON 结构,仅包含 text、mention、docs、images | 大多数场景,简单易用 | +| `richtext` | 原始 `ContentBlock` 富文本格式,完整的块结构和样式信息 | 需要精确控制@提及用户位置、包含图片/文档链接时 | + +**重要**:输入时严格根据 `--style` 值验证格式,不会自动检测。输出时读操作(如 `+cycle-detail`、`+progress-get`)根据 `--style` 返回对应格式。 + ## ContentBlock 结构概览 ```json @@ -215,9 +226,66 @@ OKR 的 Objective、KeyResult 中的 content/notes 字段使用 `ContentBlock` |-------|----------|--------| | `url` | `string` | 链接 URL | +## SemiPlainContent 半纯文本格式 + +`SemiPlainContent` 是 `ContentBlock` 的简化、有损表示形式,适用于大多数不需要复杂格式的场景。 + +### 结构 + +```json +{ + "text": "任务一 @{ou_zhangsan} ,任务二 @{ou_lisi} ", + "mention": ["ou_zhangsan", "ou_lisi"], + "docs": [ + { + "title": "产品需求文档", + "url": "https://larkoffice.com/docx/xxx" + } + ], + "images": [ + "https://example.com/image.png" + ] +} +``` + +### 类型定义 + +| 字段 | 类型 | 说明 | +|-----------|------------------|-----------------------------------------------------------------------------------------------------------| +| `text` | `string` | 纯文本内容(必填,不能为空)。**输出时**包含 ` @{userID} ` 占位符以保留提及的位置上下文;**输入时** `@{...}` 占位符会被自动 strip 掉,只识别 `mention` 字段内容 | +| `mention` | `string[]` | 用户 ID 列表(可选),与 text 中的 `@{userID}` 占位符一一对应,输入时按顺序转换为 mention 元素**置于文本末尾** | +| `docs` | `SemiPlainDoc[]` | 文档列表(仅输出时包含,输入时 simple 风格不支持) | +| `images` | `string[]` | 图片 URL 列表(仅输出时包含,输入时 simple 风格不支持) | + +### SemiPlainDoc + +| 字段 | 类型 | 说明 | +|---------|----------|--------| +| `title` | `string` | 文档标题 | +| `url` | `string` | 文档 URL | + +### 双向转换说明 + +- **ContentBlock → SemiPlainContent**(输出时):提取纯文本、提及用户、文档链接和图片 URL,丢弃格式信息(粗体、列表、颜色等)。**提及的位置信息通过 ` @{userID} ` 占位符保留在 text 中**,同时 userID 也会被收集到 mention 数组中 +- **SemiPlainContent → ContentBlock**(输入时):自动 strip 掉 text 中的 `@{...}` 占位符,然后将 text 和 mention 合并为单个段落,mention 按顺序附加在文本末尾。docs 和 images 在输入时被忽略(simple 风格不支持) + ## 使用示例 -### 示例 1:简单文本段落 +### 示例 0:--style simple 半纯文本格式 + +```json +{ + "text": "提升用户满意度", + "mention": ["ou_123"] +} +``` + +使用方式: +```bash +lark-cli okr +patch --level objective --style simple --target-id 123 --content '{"text":"提升用户满意度","mention":["ou_123"]}' +``` + +### 示例 1:简单文本段落(richtext 风格) ```json { diff --git a/skills/lark-okr/references/lark-okr-cycle-detail.md b/skills/lark-okr/references/lark-okr-cycle-detail.md index 532bbe5cf..9992f0026 100644 --- a/skills/lark-okr/references/lark-okr-cycle-detail.md +++ b/skills/lark-okr/references/lark-okr-cycle-detail.md @@ -7,20 +7,24 @@ ## 推荐命令 ```bash -# 列出指定周期的目标和关键结果 +# 列出指定周期的目标和关键结果(默认 simple 风格,半纯文本格式,推荐使用,更简洁) lark-cli okr +cycle-detail --cycle-id 1234567890123456789 +# 列出指定周期的目标和关键结果(richtext 风格,原始 ContentBlock JSON) +lark-cli okr +cycle-detail --cycle-id 1234567890123456789 --style richtext + # 预览 API 调用而不实际执行 lark-cli okr +cycle-detail --cycle-id 1234567890123456789 --dry-run ``` ## 参数 -| 参数 | 必填 | 默认值 | 说明 | -|--------------|----|--------|-----------------------------------------| -| `--cycle-id` | 是 | — | OKR 周期 ID(int64 类型)。从 `+cycle-list` 获取。 | -| `--dry-run` | 否 | — | 预览 API 调用而不实际执行。 | -| `--format` | 否 | `json` | 输出格式。 | +| 参数 | 必填 | 默认值 | 说明 | +|--------------|----|----------|-----------------------------------------------------------------------------------------------------------------------------| +| `--cycle-id` | 是 | — | OKR 周期 ID(int64 类型)。从 `+cycle-list` 获取。 | +| `--style` | 否 | `simple` | 输出风格:`simple`(半纯文本格式,不涉及字体/颜色等信息时推荐使用) \| `richtext`(原始 ContentBlock JSON)。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 | +| `--dry-run` | 否 | — | 预览 API 调用而不实际执行。 | +| `--format` | 否 | `json` | 输出格式。 | ## 工作流程 @@ -75,8 +79,11 @@ lark-cli okr +cycle-detail --cycle-id 1234567890123456789 --dry-run } ``` -其中,content 和 notes 字段是 JSON 字符串,为 OKR ContentBlock -富文本格式。请参考 [lark-okr-contentblock.md](lark-okr-contentblock.md) 了解详细信息。 +其中,content 和 notes 字段格式由 `--style` 控制: +- `--style simple`(默认):`SemiPlainContent` 对象,包含 `text`、`mention`、`docs` 字段 +- `--style richtext`:JSON 字符串,为 OKR ContentBlock 富文本格式 + +请参考 [lark-okr-contentblock.md](lark-okr-contentblock.md) 了解两种格式的详细信息。 ## 参考 diff --git a/skills/lark-okr/references/lark-okr-cycle-list.md b/skills/lark-okr/references/lark-okr-cycle-list.md index ac7a1223a..116325735 100644 --- a/skills/lark-okr/references/lark-okr-cycle-list.md +++ b/skills/lark-okr/references/lark-okr-cycle-list.md @@ -46,20 +46,20 @@ lark-cli okr +cycle-list --user-id "ou_xxx" --dry-run "cycles": [ { "id": "1234567890123456789", - "create_time": "2025-01-01 00:00:00", - "update_time": "2025-01-01 00:00:00", - "tenant_cycle_id": "789", - "owner": { - "owner_type": "user", - "user_id": "ou_xxx" - }, "start_time": "2025-01-01 00:00:00", "end_time": "2025-06-30 00:00:00", - "cycle_status": "normal", - "score": 0 + "cycle_status": "normal" } ], - "total": 1 + "total": 1, + "current_active_cycles": [ + { + "id": "1234567890123456789", + "start_time": "2025-01-01 00:00:00", + "end_time": "2025-06-30 00:00:00", + "cycle_status": "normal" + } + ] } ``` @@ -67,11 +67,14 @@ lark-cli okr +cycle-list --user-id "ou_xxx" --dry-run - `id` 是这个周期的 ID,你通常需要用它在之后使用 `okr +cycle-detail` 获取 OKR 内容详情 - `start_time` `end_time` 是周期的起止时间,总是从某个月1日开始,直到此月或之后某月的最后一日结束。 - - 在 OKR 系统中,我们只关注这个时间的年月部分,如 “2025-01-01开始,2025-06-30结束” 的周期被称作 “2025 年 1-6 月” 周期,而 - “2025-01-01开始,2025-01-31结束” 的周期被称作 “2025 年 1 月”周期。 - - 如果一个周期从某年1月1日开始,某年12月31日结束,则它是这一年的年度周期,如 “2025-01-01开始,2025-12-31结束” 的周期就是 - “2025 年” 的年度周期 + - 在 OKR 系统中,我们只关注这个时间的年月部分,如 "2025-01-01开始,2025-06-30结束" 的周期被称作 "2025 年 1-6 月" 周期,而 + "2025-01-01开始,2025-01-31结束" 的周期被称作 "2025 年 1 月"周期。 + - 如果一个周期从某年1月1日开始,某年12月31日结束,则它是这一年的年度周期,如 "2025-01-01开始,2025-12-31结束" 的周期就是 + "2025 年" 的年度周期 - `cycle_status` 为周期状态值,参见下文。 +- `current_active_cycles` 是当前生效的周期列表,不过根据用户的周期设置,可能会出现为空的场景。 + +如果需要获取周期的创建时间/总分等信息,可以通过原生 API `okr cycles list` 获取。 ### 周期状态值 diff --git a/skills/lark-okr/references/lark-okr-indicators.md b/skills/lark-okr/references/lark-okr-indicators.md new file mode 100644 index 000000000..b16ab6bf0 --- /dev/null +++ b/skills/lark-okr/references/lark-okr-indicators.md @@ -0,0 +1,223 @@ +# OKR 量化指标管理 + +> **前置条件:** 先阅读 [`lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 + +管理 OKR 目标(Objective)和关键结果(Key Result)的量化指标,包括查询和更新指标。 + +> **快速更新当前值:** 如果只需要更新指标的当前值,推荐使用 shortcut [`okr +indicator-update`](lark-okr-indicator-update.md),无需手动查询指标 ID。 +> +> 本指南中的原生 API 适用于需要修改指标其他字段(如 `unit`、`target_value`、`status_calculate_type` 等)的场景。 + +--- + +## 指标字段说明 + +| 字段 | 类型 | 说明 | +|-----------------------------|------|--------------------------------------------------------------------| +| `id` | string | 指标 ID(更新时需要) | +| `entity_id` / `entity_type` | string/int | 所属实体 ID 和类型(2=目标,3=关键结果) | +| `current_value` | number | 当前值 | +| `target_value` | number | 目标值 | +| `start_value` | number | 起始值 | +| `indicator_status` | int | 状态:-1=未定义,0=正常,1=有风险,2=已延期 | +| `status_calculate_type` | int | 状态计算方式:0=手动更新,1=基于进度和当前时间自动更新,2=基于风险最高的 KR 状态更新 | +| `current_value_calculate_type` | int | 当前值计算方式:0=手动更新,1=基于 KR 进度自动更新(目标),2=基于拆解 KR 进度更新(KR) | +| `unit` | object | 单位,包含 `unit_type`(0=公共,1=自定义)和 `unit_value`(如 PERCENT、YUAN 等) | +| `owner` | object | 所有者 | + +--- + +## 一、查询目标的量化指标 + +### 命令 + +```bash +lark-cli okr objective.indicators list --objective-id "<目标ID>" [flags] +``` + +### 常用示例 + +```bash +# 获取目标的量化指标 +lark-cli okr objective.indicators list \ + --objective-id 7652569715131075772 + +# 指定用户 ID 类型 +lark-cli okr objective.indicators list \ + --objective-id 7652569715131075772 \ + --user-id-type "user_id" +``` + +### 参数 + +| 参数 | 必填 | 默认值 | 说明 | +|----------------------|----|----------------|-----------------------------------------------------| +| `--objective-id` | 是 | — | 目标 ID | +| `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | +| `--department-id-type` | 否 | `open_department_id` | 部门 ID 类型:`open_department_id` \| `department_id` | + +### 返回 + +返回 `indicator` 字段,包含该目标的量化指标详情。 + +--- + +## 二、查询关键结果的量化指标 + +### 命令 + +```bash +lark-cli okr key_result.indicators list --key-result-id "<关键结果ID>" [flags] +``` + +### 常用示例 + +```bash +# 获取关键结果的量化指标 +lark-cli okr key_result.indicators list \ + --key-result-id "7652569715131075780" +``` + +### 参数 + +| 参数 | 必填 | 默认值 | 说明 | +|----------------------|----|----------------|-----------------------------------------------------| +| `--key-result-id` | 是 | — | 关键结果 ID | +| `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | +| `--department-id-type` | 否 | `open_department_id` | 部门 ID 类型:`open_department_id` \| `department_id` | + +### 返回 + +返回 `indicator` 字段,包含该关键结果的量化指标详情。 + +--- + +## 三、更新量化指标 + +### 命令 + +```bash +lark-cli okr indicators patch --indicator-id "<指标ID>" --data '<JSON>' +``` + +### 常用示例 + +```bash +# 更新指标的当前值(手动更新方式) +lark-cli okr indicators patch \ + --indicator-id "ind-123" \ + --data '{"current_value": 75.5, "current_value_calculate_type": 0}' + +# 更新指标状态为"有风险"(需 status_calculate_type=0) +lark-cli okr indicators patch \ + --indicator-id "ind-123" \ + --data '{"indicator_status": 1, "status_calculate_type": 0}' + +# 更新关键结果指标的目标值和单位 +lark-cli okr indicators patch \ + --indicator-id "ind-456" \ + --data '{ + "target_value": 100, + "unit": {"unit_type": 0, "unit_value": "PERCENT"} + }' + +# 从文件读取请求体 +lark-cli okr indicators patch \ + --indicator-id "ind-123" \ + --data @indicator_update.json +``` + +### 参数 + +| 参数 | 必填 | 说明 | +|------------------|----|--------------------------------------------------------------------| +| `--indicator-id` | 是 | 指标 ID(从 list 接口获取) | +| `--data` | 是 | JSON 请求体,包含要更新的字段。支持 `@文件路径` 从文件读取。 | +| `--user-id-type` | 否 | 用户 ID 类型 | + +### 请求体字段 + +根据需要更新的字段选择传入,支持增量更新: + +| 字段 | 类型 | 适用实体 | 说明 | +|-----------------------------|------|------|--------------------------------------------------------------------| +| `current_value` | number | 全部 | 当前值,范围 -99999999999 到 99999999999 | +| `current_value_calculate_type` | int | 全部 | 当前值计算方式:0=手动,1=基于 KR 进度(目标),2=基于拆解 KR 进度(KR) | +| `indicator_status` | int | 全部 | 状态:-1=未定义,0=正常,1=有风险,2=已延期。仅 `status_calculate_type=0` 时可修改 | +| `status_calculate_type` | int | 全部 | 状态计算方式:0=手动,1=自动(进度+时间),2=自动(最高风险 KR)。目标支持 0/1/2,KR 支持 0/1 | +| `start_value` | number | KR | 起始值。目标不支持修改 | +| `target_value` | number | KR | 目标值。目标不支持修改;有承接记录的 KR 不支持修改 | +| `unit` | object | KR | 单位。目标不支持修改;有承接记录的 KR 不支持修改 | + +### 单位 (`unit`) 格式 + +```json +{ + "unit": { + "unit_type": 0, // 0=公共单位,1=自定义单位 + "unit_value": "PERCENT" // 公共单位枚举:PERCENT、NONE、YUAN、DOLLAR;自定义单位:最长5字符 + } +} +``` + +### 限制说明 + +- **目标指标**:不支持修改 `start_value`、`target_value`、`unit` +- **关键结果指标**:有承接记录的 KR 不支持修改 `target_value`、`unit` +- **自动计算的指标**:`current_value_calculate_type != 0` 时,不能手动修改 `current_value` +- **自动状态的指标**:`status_calculate_type != 0` 时,不能手动修改 `indicator_status` + +--- + +## 完整工作流示例 + +### 场景:更新关键结果的指标当前值和状态 + +1. **查询关键结果的指标**(获取 `indicator_id` 和当前配置) + ```bash + lark-cli okr key_result.indicators list \ + --key-result-id 7652569715131075780 + ``` + +2. **检查指标配置**,确认: + - `current_value_calculate_type` 为 0(手动更新)才能修改 `current_value` + - `status_calculate_type` 为 0(手动更新)才能修改 `indicator_status` + +3. **更新指标** + ```bash + lark-cli okr indicators patch \ + --indicator-id "ind-123" \ + --data '{ + "current_value": 65.0, + "current_value_calculate_type": 0, + "indicator_status": 1, + "status_calculate_type": 0 + }' + ``` + +4. **验证更新结果** + ```bash + lark-cli okr key_result.indicators list \ + --key-result-id 7652569715131075780 + ``` + +### 场景:修改关键结果指标的目标值和单位 + +```bash +# 1. 查询获取 indicator_id +lark-cli okr key_result.indicators list --key-result-id 7652569715131075780 + +# 2. 更新目标值和单位 +lark-cli okr indicators patch \ + --indicator-id 7652569715131075781 \ + --data '{ + "target_value": 500, + "unit": {"unit_type": 0, "unit_value": "YUAN"} + }' +``` + +## 参考 + +- [lark-okr](../SKILL.md) -- 所有 OKR 命令 +- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 +- [okr +indicator-update](lark-okr-indicator-update.md) -- 快捷更新指标当前值(推荐) diff --git a/skills/lark-okr/references/lark-okr-patch.md b/skills/lark-okr/references/lark-okr-patch.md new file mode 100644 index 000000000..867d527f6 --- /dev/null +++ b/skills/lark-okr/references/lark-okr-patch.md @@ -0,0 +1,104 @@ +# okr +patch + +> **前置条件:** 先阅读 [`lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 + +部分更新 OKR 目标(Objective)或关键结果(Key Result)的 content、notes、score、deadline 字段。支持增量更新,只需提供要修改的字段。 + +## 推荐命令 + +```bash +# 更新目标的 content(默认 simple 风格,半纯文本格式) +lark-cli okr +patch \ + --level objective \ + --target-id 1234567890123456789 \ + --content '{"text":"更新后的目标内容","mention":["ou_123"]}' + +# 更新关键结果的分数(0.0-1.0 的一位小数) +lark-cli okr +patch \ + --level key-result \ + --target-id 2345678901234567890 \ + --score 0.7 + +# 同时更新目标的多个字段(richtext 风格,完整 ContentBlock 格式) +lark-cli okr +patch \ + --level objective \ + --target-id 1234567890123456789 \ + --style richtext \ + --content '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"更新后的目标内容"}}]}}]}' \ + --notes '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"更新后的备注"}}]}}]}' \ + --score 0.5 \ + --deadline 1735776000000 + +# 预览 API 调用而不实际执行 +lark-cli okr +patch \ + --level objective \ + --target-id 1234567890123456789 \ + --content '{"text":"测试更新"}' \ + --dry-run +``` + +## 参数 + +| 参数 | 必填 | 默认值 | 说明 | +|----------------|----|-----------|--------------------------------------------------------------------------------------------------------------------------------------| +| `--level` | 是 | — | 更新级别:`objective`(目标) \| `key-result`(关键结果) | +| `--target-id` | 是 | — | 目标 ID 或关键结果 ID(int64 类型,正整数) | +| `--style` | 否 | `simple` | 输入风格:`simple`(半纯文本 JSON,推荐) \| `richtext`(完整 ContentBlock JSON)。请参考 [ContentBlock 格式](lark-okr-contentblock.md) 了解两种格式。 | +| `--content` | 否¹ | — | 内容。根据 `--style` 指定格式。支持 `@文件路径` 从文件读取。 | +| `--notes` | 否¹ | — | 备注(仅 `--level=objective` 时支持)。根据 `--style` 指定格式。支持 `@文件路径` 从文件读取。 | +| `--score` | 否¹ | — | 分数值,0-1 之间,最多一位小数(如 0.5、1.0)。 | +| `--deadline` | 否¹ | — | 截止时间,毫秒级时间戳(如 1735776000000)。 | +| `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | +| `--dry-run` | 否 | — | 预览 API 调用而不实际执行。 | +| `--format` | 否 | `json` | 输出格式。 | + +> ¹ 至少需要提供 `--content`、`--notes`、`--score`、`--deadline` 中的一个字段。 + +## 工作流程 + +1. 使用 `+cycle-list` 和 `+cycle-detail` 获取目标或关键结果的 ID。 +2. 确定要更新的字段: + - **content/notes**:构造内容 + - **推荐**:使用 `simple` 风格(默认),构造 SemiPlainContent JSON:`{"text":"内容","mention":["ou_xxx"]}` + - 如需复杂格式:使用 `richtext` 风格,构造 ContentBlock JSON。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 + - **score**:0-1 之间的数字,最多一位小数(如 0.3、0.7、1.0) + - **deadline**:毫秒级时间戳 +3. 执行 `lark-cli okr +patch --level objective --target-id "..." --content "..."`。 +4. 报告结果:更新的级别、目标 ID、以及哪些字段被更新。 + +## 输出 + +返回 JSON: + +```json +{ + "level": "objective", + "target_id": "1234567890123456789", + "patched": { + "content": true, + "notes": true, + "score": true, + "deadline": true + } +} +``` + +其中 `patched` 对象中的每个字段表示该字段是否被更新。 + +## 注意事项 + +- **`--notes` 仅适用于目标**:关键结果(key-result)不支持 notes 字段,使用时会报错。 +- **score 格式**:必须在 0-1 之间,且最多一位小数(如 0.5 正确,0.51 错误)。 +- **严格验证**:输入格式严格根据 `--style` 值验证,不会自动检测。使用 ContentBlock JSON 时必须指定 `--style richtext`。 +- **simple 风格输入限制**:simple 风格的输入不支持 `docs` 和 `images` 字段,如需包含文档或图片请使用 `richtext` 风格。 + +## 关于 1001001 错误 + +有时,当你涉及修改目标或关键结果的分数时,即使输入的参数完全正确, +patch 也会返回 1001001 错误(invalid parameters)。 +这可能是因为在用户的租户设置中停用了目标/关键结果的分数功能,或禁用了目标分数的手动计算。此时可以先去掉 --score 参数再修改,并向用户确认是否启用了对应的功能。 + +## 参考 + +- [lark-okr](../SKILL.md) -- 所有 OKR 命令(shortcut 和 API 接口) +- [ContentBlock 格式](lark-okr-contentblock.md) -- content/notes 使用的富文本格式 +- [lark-shared](../../lark-shared/SKILL.md) -- 认证和全局参数 diff --git a/skills/lark-okr/references/lark-okr-progress-create.md b/skills/lark-okr/references/lark-okr-progress-create.md index 3731f922f..dd56a8e9c 100644 --- a/skills/lark-okr/references/lark-okr-progress-create.md +++ b/skills/lark-okr/references/lark-okr-progress-create.md @@ -7,15 +7,16 @@ ## 推荐命令 ```bash -# 为目标创建进展记录 +# 为目标创建进展记录(默认 simple 风格,半纯文本格式) lark-cli okr +progress-create \ - --content '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"本周完成了核心模块开发"}}]}}]}' \ + --content '{"text":"本周完成了核心模块开发","mention":["ou_123"]}' \ --target-id 1234567890123456789 \ --target-type objective -# 为关键结果创建进展记录(带进度百分比和状态) +# 为关键结果创建进展记录(richtext 风格,完整 ContentBlock 格式) lark-cli okr +progress-create \ --content '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"指标已达到 80%"}}]}}]}' \ + --style richtext \ --target-id 2345678901234567891 \ --target-type key_result \ --progress-percent 80 \ @@ -32,7 +33,8 @@ lark-cli okr +progress-create \ | 参数 | 必填 | 默认值 | 说明 | |----------------------|----|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| `--content` | 是 | — | 进展内容,ContentBlock JSON 格式。支持 `@文件路径` 从文件读取。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 | +| `--content` | 是 | — | 进展内容。根据 `--style` 指定格式:`simple` 风格为 SemiPlainContent JSON,`richtext` 风格为 ContentBlock JSON。支持 `@文件路径` 从文件读取。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 | +| `--style` | 否 | `simple` | 输入风格:`simple`(半纯文本 JSON,推荐) \| `richtext`(完整 ContentBlock JSON)。请参考 [ContentBlock 格式](lark-okr-contentblock.md) 了解两种格式。 | | `--target-id` | 是 | — | 目标 ID 或关键结果 ID(int64 类型,正整数) | | `--target-type` | 是 | — | 目标类型:`objective` \| `key_result` | | `--progress-percent` | 否 | — | 进度百分比(-99999999999 - 99999999999)。百分比的取值通常在 0-100,但允许超过此范围,以表示超额完成或负增长等情况。挂载的目标或关键结果的量化指标不使用百分比单位时,以这个字段更新当前值。系统内最多保留两位小数 | @@ -46,7 +48,9 @@ lark-cli okr +progress-create \ ## 工作流程 1. 使用 `+cycle-list` 和 `+cycle-detail` 获取目标或关键结果的 ID。 -2. 构造 ContentBlock JSON 格式的进展内容。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 +2. 构造进展内容: + - **推荐**:使用 `simple` 风格(默认),构造 SemiPlainContent JSON:`{"text":"内容","mention":["ou_xxx"]}`,mention 中提及的用户会统一连接在文本末尾。 + - 如需复杂格式:使用 `richtext` 风格,构造 ContentBlock JSON。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。若需要插入图片/飞书文档或复杂文本格式,则必须使用 richtext 风格 3. 执行 `lark-cli okr +progress-create --content "..." --target-id "..." --target-type objective`。 4. 报告结果:新创建的进展记录 ID、修改时间等。 diff --git a/skills/lark-okr/references/lark-okr-progress-get.md b/skills/lark-okr/references/lark-okr-progress-get.md index ddc5e29e5..e65010bed 100644 --- a/skills/lark-okr/references/lark-okr-progress-get.md +++ b/skills/lark-okr/references/lark-okr-progress-get.md @@ -7,9 +7,12 @@ ## 推荐命令 ```bash -# 获取指定 ID 的进展记录 +# 获取指定 ID 的进展记录(默认 simple 风格,半纯文本格式) lark-cli okr +progress-get --progress-id 1234567890123456789 +# 获取指定 ID 的进展记录(richtext 风格,原始 ContentBlock JSON) +lark-cli okr +progress-get --progress-id 1234567890123456789 --style richtext + # 使用特定的用户 ID 类型 lark-cli okr +progress-get --progress-id 1234567890123456789 --user-id-type open_id @@ -19,12 +22,13 @@ lark-cli okr +progress-get --progress-id 1234567890123456789 --dry-run ## 参数 -| 参数 | 必填 | 默认值 | 说明 | -|------------------|----|-----------|-----------------------------------------------| -| `--progress-id` | 是 | — | 进展记录 ID(int64 类型,正整数) | -| `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | -| `--dry-run` | 否 | — | 预览 API 调用而不实际执行。 | -| `--format` | 否 | `json` | 输出格式。 | +| 参数 | 必填 | 默认值 | 说明 | +|------------------|----|-------------|--------------------------------------------------------------------| +| `--progress-id` | 是 | — | 进展记录 ID(int64 类型,正整数) | +| `--style` | 否 | `simple` | 输出风格:`simple`(半纯文本 SemiPlainContent,推荐) \| `richtext`(原始 ContentBlock JSON)。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 | +| `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | +| `--dry-run` | 否 | — | 预览 API 调用而不实际执行。 | +| `--format` | 否 | `json` | 输出格式。 | ## 工作流程 @@ -34,26 +38,53 @@ lark-cli okr +progress-get --progress-id 1234567890123456789 --dry-run ## 输出 -返回 JSON: +返回 JSON,`content` 字段格式由 `--style` 控制: + +### `--style simple`(默认)输出示例: ```json { "progress": { "progress_id": "1234567890123456789", "modify_time": "2025-01-15 10:30:00", - "content": "{...}", + "content": { + "text": "已完成 80% 的开发工作 @{ou_zhangsan} ", + "mention": ["ou_zhangsan"], + "docs": [], + "images": [] + }, "progress_rate": { "percent": 75.0, "status": "normal" } - } + }, + "style": "simple" +} +``` + +### `--style richtext` 输出示例: + +```json +{ + "progress": { + "progress_id": "1234567890123456789", + "modify_time": "2025-01-15 10:30:00", + "content": "{\"blocks\":[{\"block_element_type\":\"paragraph\",\"paragraph\":{\"elements\":[{\"paragraph_element_type\":\"textRun\",\"text_run\":{\"text\":\"已完成 80% 的开发工作 \"}},{\"paragraph_element_type\":\"mention\",\"mention\":{\"user_id\":\"ou_zhangsan\"}}]}}]}", + "progress_rate": { + "percent": 75.0, + "status": "normal" + } + }, + "style": "richtext" } ``` 其中: -- `content` 字段是 JSON 字符串,为 OKR ContentBlock - 富文本格式。请参考 [lark-okr-contentblock.md](lark-okr-contentblock.md) 了解详细信息。 +- `content` 字段格式由 `--style` 控制: + - `--style simple`(默认):`SemiPlainContent` 对象,包含 `text`、`mention`、`docs`、`images` 字段。`text` 中包含 `@{userID}` 占位符用于标识 mention 位置。 + - `--style richtext`:JSON 字符串,为 OKR ContentBlock 富文本格式 +- 请参考 [lark-okr-contentblock.md](lark-okr-contentblock.md) 了解两种格式的详细信息。 - `progress_rate.status` 返回可读字符串:`normal`(正常)、`overdue`(逾期)、`done`(已完成)。 ## 参考 diff --git a/skills/lark-okr/references/lark-okr-progress-update.md b/skills/lark-okr/references/lark-okr-progress-update.md index a047da847..7491ba7f2 100644 --- a/skills/lark-okr/references/lark-okr-progress-update.md +++ b/skills/lark-okr/references/lark-okr-progress-update.md @@ -7,15 +7,16 @@ ## 推荐命令 ```bash -# 更新进展记录内容 +# 更新进展记录内容(默认 simple 风格,半纯文本格式) lark-cli okr +progress-update \ --progress-id 1234567890123456789 \ - --content '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"更新后的进展内容"}}]}}]}' + --content '{"text":"更新后的进展内容","mention":["ou_123"]}' -# 更新进展记录内容并同时更新进度 +# 更新进展记录内容并同时更新进度(richtext 风格,完整 ContentBlock 格式) lark-cli okr +progress-update \ --progress-id 1234567890123456789 \ --content '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"进度已更新至 90%"}}]}}]}' \ + --style richtext \ --progress-percent 90 \ --progress-status normal @@ -27,7 +28,7 @@ lark-cli okr +progress-update \ # 预览 API 调用而不实际执行 lark-cli okr +progress-update \ --progress-id 1234567890123456789 \ - --content '{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"test"}}]}}]}' \ + --content '{"text":"test"}' \ --dry-run ``` @@ -36,7 +37,8 @@ lark-cli okr +progress-update \ | 参数 | 必填 | 默认值 | 说明 | |----------------------|----|-----------|----------------------------------------------------------------------------------------------------------------| | `--progress-id` | 是 | — | 进展记录 ID(int64 类型,正整数) | -| `--content` | 是 | — | 进展内容,ContentBlock JSON 格式。支持 `@文件路径` 从文件读取。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 | +| `--content` | 是 | — | 进展内容。根据 `--style` 指定格式:`simple` 风格为 SemiPlainContent JSON,`richtext` 风格为 ContentBlock JSON。支持 `@文件路径` 从文件读取。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 | +| `--style` | 否 | `simple` | 输入风格:`simple`(半纯文本 JSON,推荐) \| `richtext`(完整 ContentBlock JSON)。请参考 [ContentBlock 格式](lark-okr-contentblock.md) 了解两种格式。 | | `--progress-percent` | 否 | — | 进度百分比(-99999999999 - 99999999999)。百分比的取值通常在 0-100,但允许超过此范围,以表示超额完成或负增长等情况。挂载的目标或关键结果的量化指标不使用百分比单位时,以这个字段更新当前值。系统内最多保留两位小数 | | `--progress-status` | 否 | — | 进度状态:`normal`(正常) \| `overdue`(逾期) \| `done`(已完成)。仅在指定 `--progress-percent` 时生效。 | | `--user-id-type` | 否 | `open_id` | 用户 ID 类型:`open_id` \| `union_id` \| `user_id` | @@ -46,7 +48,9 @@ lark-cli okr +progress-update \ ## 工作流程 1. 使用 `+progress-get` 获取要更新的进展记录的 ID 和当前内容。 -2. 修改 ContentBlock JSON 格式的进展内容。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。 +2. 修改进展内容: + - **推荐**:使用 `simple` 风格(默认),构造 SemiPlainContent JSON:`{"text":"内容","mention":["ou_xxx"]}`,mention 中提及的用户会统一连接在文本末尾。 + - 如需复杂格式:使用 `richtext` 风格,构造 ContentBlock JSON。请参考 [ContentBlock 格式](lark-okr-contentblock.md)。若需要插入图片/飞书文档或复杂文本格式,则必须使用 richtext 风格 3. 执行 `lark-cli okr +progress-update --progress-id "..." --content "..."`。 4. 报告结果:更新后的进展记录 ID、修改时间、进度百分比等。 diff --git a/skills/lark-shared/SKILL.md b/skills/lark-shared/SKILL.md index 272b2bae4..e78ddd496 100644 --- a/skills/lark-shared/SKILL.md +++ b/skills/lark-shared/SKILL.md @@ -146,6 +146,24 @@ lark-cli update **重要**:始终使用 `lark-cli update` 更新,它会同时更新 CLI 和 AI Skills。 +## JSON 输出契约 + +`--format json`(默认)下,成功与错误的信封结构不同: + +成功信封写入 **stdout**(退出码 0): + +```json +{ "ok": true, "identity": "user", "data": { "guid": "..." }, "meta": { "count": 1 } } +``` + +错误信封写入 **stderr**(退出码非 0): + +```json +{ "ok": false, "identity": "user", "error": { "type": "api", "subtype": "...", "code": 99991679, "message": "...", "hint": "..." } } +``` + +**判断成功必须用 `ok == true`(或进程退出码 0),不要用 `code == 0`**:成功信封没有顶层 `code` / `msg` 字段,`code` 只出现在错误信封的 `error` 内,含义是上游 OpenAPI 的 numeric code。按 OpenAPI 老格式 `{"code": 0, "msg": "ok"}` 判断会把所有成功调用误判为失败;封装写入类命令(如 `task +create`)时尤其危险,误判会绕过幂等逻辑导致重复创建。 + ## 安全规则 - **禁止输出密钥**(appSecret、accessToken)到终端明文。 diff --git a/skills/lark-slides/SKILL.md b/skills/lark-slides/SKILL.md index 4630b663c..4d4e8c507 100644 --- a/skills/lark-slides/SKILL.md +++ b/skills/lark-slides/SKILL.md @@ -23,13 +23,14 @@ metadata: | 在 slide 中绘制柱/条/折线/面积/雷达/饼等有数据序列的图表 | 使用原生 `<chart>` 元素 | `xml-schema-quick-ref.md` | | 在 slide 中绘制流程图、时序图、架构图、散点图、漏斗图或装饰图案 | 必须先用 Read 工具读取参考文档,再生成 `<whiteboard>` 元素 | [`lark-slides-whiteboard.md`](references/lark-slides-whiteboard.md) | | 使用语义图标 | 先检索 IconPark,再写 `<icon iconType="...">` | `iconpark_tool.py search → resolve`、`iconpark.md` | -| 用户提到模板、主题、版式 | 先检索模板,再摘要,必要时裁切骨架 | `template_tool.py search → summarize → extract` | | 创建失败、空白页、3350001、布局异常 | 先回读状态,再按排障清单修复,不假设原操作原子成功 | `troubleshooting.md`、`validation-checklist.md` | **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),认证、权限和全局参数均以 lark-shared 为准。** **CRITICAL — 生成任何 XML 之前,MUST 先用 Read 工具读取 [xml-schema-quick-ref.md](references/xml-schema-quick-ref.md),禁止凭记忆猜测 XML 结构。** +**CRITICAL — PPT 生成与模板编辑硬约束:PPT 的尺寸是 960x540,确保主体内容在页面边界内。多用生图,辅助搜图,必须要图文并茂。不要为了画出一个具象物体而堆叠 3 个以上仅用于拟形的 shape。生成背景图时必须在 prompt 中明确要求不要出现任何文字。用户指定 PPT 模板时,用 lark-drive 技能导入成 lark slides,回读理解每页版式后,直接在该 slides 上编辑,可以填改文字和图片、按需增删模板页,必须严格沿用原版式和字体,只改内容不做设计,完成后回读并微调,凝练文字或缩减字号消除文字溢出,调整 shape 顺序或位置避免文字遮挡。** + **CRITICAL — 新建演示文稿或大幅改写页面时,MUST 先生成 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`,再生成 XML。先创建对应目录,规划层规则和中间产物生命周期见 [planning-layer.md](references/planning-layer.md)。仅替换一个标题、插入一个块等小型已有页编辑可豁免。** **CRITICAL — 新建演示文稿或大幅改写页面时,生成 XML 前 MUST 读取 [visual-planning.md](references/visual-planning.md),确保 `layout_type`、`visual_focus`、`text_density` 实际改变页面几何、主视觉和文本量。** @@ -40,13 +41,6 @@ metadata: **CRITICAL — 创建前自检或失败排障时,MUST 按 [troubleshooting.md](references/troubleshooting.md) 检查 XML 转义、结构、shell 截断、图片 token、3350001 和布局风险。** -**CRITICAL — 如果用户提到“模板”“套用模板”“参考某种主题/风格/版式”,或用户需求明显落在已有场景模板内(如工作汇报、产品介绍、商业计划书、培训、晋升汇报等),MUST 先用 [`scripts/template_tool.py`](scripts/template_tool.py) 的 `search` 做模板检索;默认给出 2-3 个最匹配模板候选供用户选择。锁定模板后用 `summarize` 获取主题和布局摘要;只有需要布局骨架时才用 `extract` 裁切目标页型 XML。不要直接读取完整模板 XML。** - -> [!NOTE] -> `scripts/template_tool.py` 需要 Python 3。`references/template-index.json` 是脚本缓存/轻量路由索引,不是默认给 agent 阅读的文档;`assets/templates/*.xml` 是机器资源,只应通过脚本摘要或裁切,不要全文读取。 - -**CRITICAL — 使用模板生成或改写页面时,MUST 先 `summarize` 目标页型;只有需要具体布局骨架时才 `extract`。** - **编辑已有幻灯片页面**:单个标题、文本块、图片或局部元素优先用 [`+replace-slide`](references/lark-slides-replace-slide.md)(块级替换/插入,不动页序);已有 Slides 的多页大改优先用 [`+replace-pages`](references/lark-slides-replace-pages.md) 在原 presentation 内批量重建页面,避免 `slides +create` 生成新链接。选择 action 和完整读-改-写流程见 [`lark-slides-edit-workflows.md`](references/lark-slides-edit-workflows.md)。 ## 身份选择 @@ -87,7 +81,6 @@ lark-cli auth login --domain slides - 图片:[`lark-slides-media-upload.md`](references/lark-slides-media-upload.md) - 流程图 / 时序图 / 架构图 / 装饰图案:[`lark-slides-whiteboard.md`](references/lark-slides-whiteboard.md) - 图标:[`iconpark.md`](references/iconpark.md)、[`scripts/iconpark_tool.py`](scripts/iconpark_tool.py) -- 模板:[`template-catalog.md`](references/template-catalog.md)、[`scripts/template_tool.py`](scripts/template_tool.py) - 排障:[`troubleshooting.md`](references/troubleshooting.md) - 完整协议:[`slides_xml_schema_definition.xml`](references/slides_xml_schema_definition.xml) @@ -131,7 +124,7 @@ lark-cli auth login --domain slides - 不要用低对比文字或低对比图标,例如浅灰字压在浅色背景上。 - 不要让装饰线穿过文字,或让页脚、来源、编号挤压主体内容。 - 不要把素材缺失表现为空白图片框;必须按 `fallback_if_missing` 生成 XML-native 视觉。 -- 不要留下模板占位文案、示例公司名、示例日期或与用户主题无关的原模板内容。 +- 不要留下占位文案、示例公司名、示例日期或与用户主题无关的内容。 ### 创建方式选择 @@ -147,25 +140,15 @@ lark-cli auth login --domain slides > [!IMPORTANT] > `slides +create --slides` 底层会逐页创建,不是原子操作。中途失败时先记录 `xml_presentation_id`,回读确认当前状态,再继续修复或追加。 -### 模板与脚本优先流程 - -模板细则见 [template-catalog.md](references/template-catalog.md)。主流程只记住:先 `search`,锁定后 `summarize`,需要骨架时才 `extract`;不要直接读取完整模板 XML 或照搬占位文案。 - -```bash -python3 skills/lark-slides/scripts/template_tool.py search --query "<用户需求原文>" --limit 3 -python3 skills/lark-slides/scripts/template_tool.py summarize --template <template-id> --label <封面|目录|分节|内容|结尾> -python3 skills/lark-slides/scripts/template_tool.py extract --template <template-id> --label <页型> --out /tmp/template-slice.xml -``` - ```text Step 1: 需求澄清 & 读取知识 - - 澄清主题、受众、页数、风格;模板需求按“模板与脚本优先流程”处理 + - 澄清主题、受众、页数、风格 - 读取 xml-schema-quick-ref.md;新建 / 大幅改写时还要读取 planning-layer.md、visual-planning.md、asset-planning.md Step 2: 生成大纲 → 用户确认 → 写入 slide_plan.json - - 生成结构化大纲供用户确认;如使用模板,标明基于哪个模板改写 + - 生成结构化大纲供用户确认 - 新建 / 大幅改写必须先创建目录并写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json` - - plan 字段、路径命名、模板边界和 `asset_need` 结构按 planning-layer.md / asset-planning.md 执行 + - plan 字段、路径命名和 `asset_need` 结构按 planning-layer.md / asset-planning.md 执行 Step 3: 按 slide_plan.json 生成 XML → 创建 - 逐页消费 plan:key_message 定主结论,layout_type 定几何,visual_focus 定主视觉,text_density 定文本量 @@ -212,8 +195,6 @@ lark-cli slides xml_presentation.slide create \ ```text [PPT 标题] — [定位描述],面向 [目标受众] -模板:[未使用模板 / <category>/<template>.xml(推荐原因)] - 页面结构(N 页): 1. 封面页:[标题文案] 2. [页面主题]:[要点1]、[要点2]、[要点3] @@ -281,7 +262,7 @@ lark-cli slides <resource> <method> [flags] # 调用 API ## 核心规则 -1. **先规划再写 XML**:新建演示文稿或大幅改写页面时,必须先写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`;模板、风格和大纲只能作为规划输入,不能绕过规划层 +1. **先规划再写 XML**:新建演示文稿或大幅改写页面时,必须先写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`;风格和大纲只能作为规划输入,不能绕过规划层 2. **创建流程**:简单短 XML(1-3 页、结构简单、特殊字符少)可用 `slides +create --slides '[...]'` 一步创建;复杂内容、含图片/中文大段文本/嵌套引号/较多特殊字符,或超过 10 页时,默认先 `slides +create` 创建空白 PPT,再用 `xml_presentation.slide.create` 逐页添加 3. **`<slide>` 直接子元素只有 `<style>`、`<data>`、`<note>`**:文本和图形必须放在 `<data>` 内 4. **文本通过 `<content>` 表达**:必须用 `<content><p>...</p></content>`,不能把文字直接写在 shape 内 diff --git a/skills/lark-slides/assets/templates/administration--all_hands_meeting.xml b/skills/lark-slides/assets/templates/administration--all_hands_meeting.xml deleted file mode 100644 index f46dba2b4..000000000 --- a/skills/lark-slides/assets/templates/administration--all_hands_meeting.xml +++ /dev/null @@ -1,1999 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>全员大会 - - - - - - - <headline fontColor="#000000FF" fontSize="40"/> - <sub-headline fontColor="#000000FF" fontSize="24"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="479" height="74" topLeftX="57" topLeftY="294" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="40">202</span> - </strong> - <strong> - <span fontSize="40">6</span> - </strong> - <strong> - <span fontSize="40"> </span> - </strong> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="40">Q</span> - </strong> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="40">1</span> - </strong> - </p> - </content> - </shape> - <shape width="817" height="146" topLeftX="57" topLeftY="342" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="90" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span fontSize="90">全员大会</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="AkfFbXJtZoBnSpx4bZecGd3Pnxe" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="F4uob6k5aoLElPx01GdcxiB2nwg" width="72" height="72" topLeftX="763" topLeftY="428"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="788" height="398" topLeftX="86" topLeftY="71" presetHandlers="24" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <img src="Il4nb9FTAoWv0VxZaxNcafghnWg" width="112" height="112" topLeftX="39" topLeftY="112"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="398" height="56" topLeftX="281" topLeftY="153" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="672" height="74" topLeftX="144" topLeftY="86" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p> - 目录 - <span color="rgba(51, 112, 255, 1)">CONTENTS</span> - </p> - </content> - </shape> - <line startX="413" startY="248" endX="413" endY="399"> - <border color="rgba(143, 149, 158, 1)" dashArray="round-dot" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="8" height="8" topLeftX="409" topLeftY="245" type="ellipse"> - <fill> - <fillColor color="rgba(54, 53, 88, 1)"/> - </fill> - </shape> - <shape width="225" height="44" topLeftX="430" topLeftY="227" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">欢迎新人 & 获奖公示</span> - </strong> - </p> - </content> - </shape> - <shape width="75" height="44" topLeftX="322" topLeftY="227" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)" bold="true" italic="true" letterSpacing="1" textAlign="right"> - <p letterSpacing="1"> - <strong> - <em> - <span color="rgba(51, 112, 255, 1)" fontSize="16">Part1</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="75" height="44" topLeftX="322" topLeftY="277" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)" bold="true" italic="true" letterSpacing="1" textAlign="right"> - <p letterSpacing="1"> - <strong> - <em> - <span color="rgba(51, 112, 255, 1)" fontSize="16">Part2</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="75" height="44" topLeftX="322" topLeftY="327" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)" bold="true" italic="true" letterSpacing="1" textAlign="right"> - <p letterSpacing="1"> - <strong> - <em> - <span color="rgba(51, 112, 255, 1)" fontSize="16">Part3</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="75" height="44" topLeftX="322" topLeftY="377" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)" bold="true" italic="true" letterSpacing="1" textAlign="right"> - <p letterSpacing="1"> - <strong> - <em> - <span color="rgba(51, 112, 255, 1)" fontSize="16">Part4</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="8" height="8" topLeftX="409" topLeftY="295" type="ellipse"> - <fill> - <fillColor color="rgba(54, 53, 88, 1)"/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="409" topLeftY="345" type="ellipse"> - <fill> - <fillColor color="rgba(54, 53, 88, 1)"/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="409" topLeftY="395" type="ellipse"> - <fill> - <fillColor color="rgba(54, 53, 88, 1)"/> - </fill> - </shape> - <shape width="113" height="44" topLeftX="430" topLeftY="277" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">2025 年回顾</span> - </strong> - </p> - </content> - </shape> - <shape width="114" height="44" topLeftX="430" topLeftY="327" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">2026 年规划</span> - </strong> - </p> - </content> - </shape> - <shape width="225" height="44" topLeftX="430" topLeftY="377" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">Q&A</span> - </strong> - </p> - </content> - </shape> - <shape width="348" height="38" topLeftX="306" topLeftY="153" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="W5g8b10TooGawdx2cI8crFS7nOh" width="301" height="540" topLeftX="659" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="123" topOffset="0" bottomOffset="0"/> - </img> - <shape width="493" height="44" topLeftX="126" topLeftY="275" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)"> - <p>介绍新人和获奖员工,鼓励大家融入团队,积极参加公司发展</p> - </content> - </shape> - <shape width="627" height="93" topLeftX="126" topLeftY="187" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>欢迎新人 & 获奖公示</p> - </content> - </shape> - <shape width="112" height="93" topLeftX="33" topLeftY="187" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(51, 112, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="788" height="377" topLeftX="86" topLeftY="124" presetHandlers="24" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <img src="PhT5b9Bc1o3TvuxKxUIcJo0vnQb" width="189" height="189" topLeftX="762" topLeftY="51"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="777" height="69" topLeftX="92" topLeftY="44" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="36">欢迎来到这个大家庭</span> - </strong> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="151" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="331" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="504" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="672" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="151" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="331" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="504" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="672" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="16">员工名字</span> - </p> - </content> - </shape> - <img src="NHrIbt1A3oMbitxWsPZcyLTKnKf" width="78" height="78" topLeftX="181" topLeftY="176"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="V75Vb338vorgxkxjKx5cyZ6engb" width="78" height="78" topLeftX="361" topLeftY="175"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="SrnDbKWsaoznfwxLQEGcG4mcnQb" width="78" height="78" topLeftX="533" topLeftY="176"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="QahFbzNmCo9FB3xJ5TPcjg5xn8d" width="78" height="78" topLeftX="702" topLeftY="176"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="WRrTbgtPFoP713xmSIQc8iBVnYf" width="78" height="78" topLeftX="702" topLeftY="329"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="BiL5bqtgwoaN3exlYQgc4NVJnJd" width="78" height="78" topLeftX="533" topLeftY="330"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="UYAZbz9Eoo0XFmxlhEFcikqIn6g" width="78" height="78" topLeftX="361" topLeftY="330"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="LHEObkseLoQfsexqLOccXY53nRe" width="78" height="78" topLeftX="181" topLeftY="330"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="208" height="282" topLeftX="29" topLeftY="197" presetHandlers="16" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="208" height="282" topLeftX="260" topLeftY="197" presetHandlers="16" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="208" height="282" topLeftX="492" topLeftY="197" presetHandlers="16" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="208" height="282" topLeftX="723" topLeftY="197" presetHandlers="16" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <img src="C3GBbzpGIoMCDVxOQ3cczoFcnSg" width="90" height="51" topLeftX="781" topLeftY="135"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="BJy9bjLHOoayw6x78FMcmNoinVf" width="111" height="51" topLeftX="309" topLeftY="135"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="ZWzQbFpQhoqAqrxYvTgcf9qonac" width="111" height="51" topLeftX="78" topLeftY="135"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="QLFmbv7FZoTGOvxOYtdc3TCDn3c" width="90" height="51" topLeftX="550" topLeftY="135"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="777" height="69" topLeftX="92" topLeftY="44" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="36">本季度</span> - </strong> - <strong> - <span fontSize="36">获奖公示</span> - </strong> - </p> - </content> - </shape> - <img src="SVpMbK6adoMpTVxpGbIc3RE8nVb" width="36" height="36" topLeftX="56" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="Annab41rxoBz8Exqhe7cyJtwnLd" width="36" height="36" topLeftX="56" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="NHrIbt1A3oMbitxWsPZcyLTKnKf" width="36" height="36" topLeftX="56" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="V5OUbGuJLov0xbx2bhkcBsJYnVe" width="36" height="36" topLeftX="116" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="FdFEbs6yToEbrRx4IVcc2jqcnIh" width="36" height="36" topLeftX="177" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="H6jXbm7ApocfhfxDxWccEoZSnWg" width="36" height="36" topLeftX="116" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="VfjMbo5pzoQYrcxkUxOcRszdn4g" width="36" height="36" topLeftX="177" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="SNwIbIO77oo2YPxO0rfcaVmHnRc" width="36" height="36" topLeftX="116" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="H7vcbaPAeoEvx2xqHdZcSqVCngf" width="36" height="36" topLeftX="177" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="JFB6b5KyroWF4YxTzI4cdA6fnsg" width="36" height="36" topLeftX="287" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="HDzwbrKTVoh68mxIK6rcclzOnwe" width="36" height="36" topLeftX="287" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="VGyxbRY80oMA8ixF4wbce8Mhn5e" width="36" height="36" topLeftX="287" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="Xax9bCmEYoSeL9xDj0ucMqSXnlf" width="36" height="36" topLeftX="348" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="GE5BbiQCpoojuSxJDigcrcR3nPx" width="36" height="36" topLeftX="409" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="Bw5bbvhNSoaPOXxBLkxcB0tZnCd" width="36" height="36" topLeftX="348" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="T50zbVpndox1HsxEPEjc95QlnUf" width="36" height="36" topLeftX="409" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="ErbqbpIXKoF5GKxSObHckvfDn4I" width="36" height="36" topLeftX="348" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="J9mPbQdhbov1nsxDyLMc4l0znYg" width="36" height="36" topLeftX="409" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="MFk7bOj22oE1ijxTtRKc6qV8n3g" width="36" height="36" topLeftX="517" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="RpgabG1B6odzkRx2g2nckSY1nId" width="36" height="36" topLeftX="517" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="C3CgbusUUoVamCxz5l8cFyC8nNc" width="36" height="36" topLeftX="517" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="P5dqbcq71oTesxx2vvJcaMHin8f" width="36" height="36" topLeftX="578" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="DfnubQhKVo19BGxDp5JctoeVn1c" width="36" height="36" topLeftX="639" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="RQPRbebY2oyZqlxx5FMcl5h4nrc" width="36" height="36" topLeftX="578" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="CazIbP4YZoNAMlxbLrXcKPOjn3v" width="36" height="36" topLeftX="639" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="NHrIbt1A3oMbitxWsPZcyLTKnKf" width="36" height="36" topLeftX="578" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="AgCVbxWmPoutqExH1isc0dopnfc" width="36" height="36" topLeftX="639" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="NrLzbva2IokLEsxEigPcXg5Xnmh" width="36" height="36" topLeftX="749" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="NsIMbdRMbodm6mxFheCcCNaXnGd" width="36" height="36" topLeftX="749" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="YkrgbYHQsoaouRxHWQacTxj0n8e" width="36" height="36" topLeftX="749" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="NHrIbt1A3oMbitxWsPZcyLTKnKf" width="36" height="36" topLeftX="810" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="WcmhbnhHWoSb5Wx1Y6jcIL9znRb" width="36" height="36" topLeftX="871" topLeftY="220"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="RAlob6feTonxC4xVZKmcXf7Mnhc" width="36" height="36" topLeftX="810" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="BjhxbSh4qo55SqxHGfMcTjk7nef" width="36" height="36" topLeftX="871" topLeftY="304"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="MLyyb2bTZorkxAxyCO4cyApZnXg" width="36" height="36" topLeftX="810" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="RMTVbHE1OoS4P9x0h11cTJl7nnf" width="36" height="36" topLeftX="871" topLeftY="388"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="74"/> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="72" height="32" topLeftX="38" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="98" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="159" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="38" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="98" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="159" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="38" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="98" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="159" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="267" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="328" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="389" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="501" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="562" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="623" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="731" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="792" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="267" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="328" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="501" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="562" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="731" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="792" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="853" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="623" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="267" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="501" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="731" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="792" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="853" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="562" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="623" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="328" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="389" topLeftY="256" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="389" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - <shape width="72" height="32" topLeftX="853" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(54, 53, 88, 1)" fontSize="12">名字</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="MXKebcj5RoreF2xLzGdcMEqMnbf" width="434" height="514" topLeftX="526" topLeftY="26" alpha="0.73"> - <crop type="rect" leftOffset="0" rightOffset="80" topOffset="0" bottomOffset="0"/> - </img> - <shape width="493" height="40" topLeftX="146" topLeftY="295" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(51, 112, 255, 1)" fontSize="16">回顾202</span> - <span color="rgba(51, 112, 255, 1)" fontSize="16">5</span> - <span color="rgba(51, 112, 255, 1)" fontSize="16">年关键的OKR、项目及达成情况</span> - </p> - </content> - </shape> - <shape width="627" height="85" topLeftX="146" topLeftY="207" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="54">202</span> - </strong> - <strong> - <span fontSize="54">5</span> - </strong> - <strong> - <span fontSize="54"> 年复盘</span> - </strong> - </p> - </content> - </shape> - <shape width="112" height="93" topLeftX="53" topLeftY="207" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(51, 112, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(90deg,rgba(155, 177, 255, 1) 0%,rgba(206, 197, 255, 1) 94%,rgba(210, 199, 255, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="180" height="180" topLeftX="60" topLeftY="184" presetHandlers="24" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="18">目标回顾</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="180" height="74" topLeftX="60" topLeftY="378" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="78" topLeftX="60" topLeftY="168" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" fontSize="48">ONE</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="180" height="180" topLeftX="280" topLeftY="184" presetHandlers="24" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="18">实现策略</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="180" height="74" topLeftX="280" topLeftY="378" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="78" topLeftX="280" topLeftY="168" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" fontSize="48">TWO</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="180" height="180" topLeftX="500" topLeftY="184" presetHandlers="24" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="18">核心项目</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="180" height="74" topLeftX="500" topLeftY="378" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="78" topLeftX="500" topLeftY="168" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" fontSize="48">THREE</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="180" height="180" topLeftX="720" topLeftY="184" presetHandlers="24" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="18">数据&结果</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="180" height="74" topLeftX="720" topLeftY="378" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="78" topLeftX="720" topLeftY="168" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(90deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" fontSize="48">FOUR</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="535" height="40" topLeftX="213" topLeftY="118" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="777" height="69" topLeftX="92" topLeftY="64" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="36">年度 OKR 回顾</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="JPmgbRXaPo46xxx57uDcDjpnnyh" width="780" height="399" topLeftX="90" topLeftY="70"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="60" height="44" topLeftX="133" topLeftY="177" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">O1</span> - </strong> - </p> - </content> - </shape> - <shape width="480" height="44" topLeftX="210" topLeftY="177" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>目标一:年度总销售额达到600万</strong> - </p> - </content> - </shape> - <shape width="60" height="44" topLeftX="133" topLeftY="243" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">O2</span> - </strong> - </p> - </content> - </shape> - <shape width="480" height="44" topLeftX="210" topLeftY="243" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>目标二:年度新用户增长超过30%</strong> - </p> - </content> - </shape> - <shape width="60" height="44" topLeftX="133" topLeftY="308" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">O3</span> - </strong> - </p> - </content> - </shape> - <shape width="480" height="44" topLeftX="210" topLeftY="308" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>目标三:年度市场份额增长超过20%</strong> - </p> - </content> - </shape> - <shape width="60" height="44" topLeftX="133" topLeftY="374" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">O4</span> - </strong> - </p> - </content> - </shape> - <shape width="480" height="44" topLeftX="210" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>目标四:年度用户满意度超过85%</strong> - </p> - </content> - </shape> - <shape width="460" height="53" topLeftX="250" topLeftY="79" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.71)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>团队 2025 年 OKR</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="DwazbOHa4oUJ5pxFvA1cLcronmh" width="780" height="192" topLeftX="90" topLeftY="104"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EVJhbkOi4oUA4ixtPTCcAdttnVb" width="119" height="117" topLeftX="163" topLeftY="236"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="NjDxblpZUoLsM5xsbtccJqhOnYb" width="119" height="117" topLeftX="163" topLeftY="288"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="460" height="49" topLeftX="250" topLeftY="114" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 0.71)" fontSize="24">团队 202</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 0.71)" fontSize="24">5</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 0.71)" fontSize="24"> 年度 OKR </span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="44" topLeftX="133" topLeftY="207" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">O1</span> - </strong> - </p> - </content> - </shape> - <shape width="480" height="44" topLeftX="210" topLeftY="207" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>目标一:年度总销售额达到XXX万</strong> - </p> - </content> - </shape> - <shape width="540" height="44" topLeftX="306" topLeftY="331" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">关键结果1:华南区域成功签约X家重点客户,贡献XXX万销售额</span> - </p> - </content> - </shape> - <shape width="540" height="44" topLeftX="306" topLeftY="383" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">关键结果2:西北区域启动售卖,拿到X家首批共创客户</span> - </p> - </content> - </shape> - <shape width="18" height="18" topLeftX="272" topLeftY="396" type="ellipse"> - <fill> - <fillColor color="rgba(67, 51, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="18" topLeftX="272" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="rgba(67, 51, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Xy4HbnnvOofqqSxJS4Zcs7gJnGc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="583" height="429" topLeftX="377" topLeftY="111" flipX="true" type="round1rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(54, 115, 255, 0.09) 0%,rgba(212, 227, 255, 0.12) 67%,rgba(255, 255, 255, 0.11) 100%)"/> - </fill> - <border color="linear-gradient(240deg,rgba(103, 100, 255, 0.22) 0%,rgba(255, 255, 255, 0) 21%,rgba(228, 237, 255, 1) 37%,rgba(202, 219, 251, 1) 79%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(255, 255, 255, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="225" blur="10" color="rgba(20, 79, 219, 0.07)"/> - </shape> - <shape width="583" height="413" topLeftX="389" topLeftY="122" presetHandlers="10" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(238, 243, 255, 1) 0%,rgba(222, 231, 254, 1) 50%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(202, 219, 251, 1) 100%,rgba(255, 255, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="308" height="56" topLeftX="35" topLeftY="389" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="44" topLeftX="35" topLeftY="356" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">客户成功服务品质提升 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="308" height="56" topLeftX="35" topLeftY="288" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="44" topLeftX="35" topLeftY="255" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">商业化定价改造上线 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="308" height="56" topLeftX="35" topLeftY="192" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="44" topLeftX="35" topLeftY="159" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16"> 制造业重点客户共创 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="342" height="74" topLeftX="35" topLeftY="63" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="40">核心项目</span> - </strong> - </p> - </content> - </shape> - <img src="ETlZbNnuVo9edxxliJ8cqqOInuY" width="637" height="390" topLeftX="331" topLeftY="108"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XFfgb8GIRoIWZzxycb3cXWMLnS8" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="651" height="74" topLeftX="37" topLeftY="34" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">关键结果</span> - </p> - </content> - </shape> - <shape width="278" height="56" topLeftX="37" topLeftY="108" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(31, 35, 41, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="204" height="203" topLeftX="267" topLeftY="239" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.9) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <border color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="197" height="42" topLeftX="271" topLeftY="313" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">客户成功服务培训</span> - </strong> - </p> - </content> - </shape> - <shape width="152" height="52" topLeftX="293" topLeftY="265" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span fontSize="24">9场</span> - </p> - </content> - </shape> - <shape width="189" height="56" topLeftX="275" topLeftY="347" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">这里可以输入简单的文案来描述你的关键结果</span> - </p> - </content> - </shape> - <shape width="204" height="203" topLeftX="37" topLeftY="239" type="ellipse"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="19" color="rgba(255, 255, 255, 0.52)"/> - </shape> - <shape width="197" height="42" topLeftX="41" topLeftY="313" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">共创客户</span> - </strong> - </p> - </content> - </shape> - <shape width="152" height="52" topLeftX="63" topLeftY="265" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="24">15 家</span> - </strong> - </p> - </content> - </shape> - <shape width="189" height="56" topLeftX="45" topLeftY="347" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)">这里可以输入简单的文案来描述你的关键结果</span> - </p> - </content> - </shape> - <shape width="204" height="203" topLeftX="497" topLeftY="239" type="ellipse"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="19" color="rgba(255, 255, 255, 0.52)"/> - </shape> - <shape width="197" height="38" topLeftX="501" topLeftY="313" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">市场占有率超过60%</span> - </strong> - </p> - </content> - </shape> - <shape width="152" height="52" topLeftX="523" topLeftY="265" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="24">23 个城市</span> - </strong> - </p> - </content> - </shape> - <shape width="189" height="56" topLeftX="505" topLeftY="347" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)">这里可以输入简单的文案来描述你的关键结果</span> - </p> - </content> - </shape> - <shape width="204" height="203" topLeftX="727" topLeftY="239" type="ellipse"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="19" color="rgba(255, 255, 255, 0.52)"/> - </shape> - <shape width="197" height="40" topLeftX="731" topLeftY="313" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="16">新客户来自老客户推荐</span> - </strong> - </p> - </content> - </shape> - <shape width="152" height="52" topLeftX="753" topLeftY="265" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="24">80%</span> - </strong> - </p> - </content> - </shape> - <shape width="189" height="56" topLeftX="735" topLeftY="347" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)">这里可以输入简单的文案来描述你的关键结果</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XFfgb8GIRoIWZzxycb3cXWMLnS8" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="651" height="74" topLeftX="37" topLeftY="34" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">关键结果</span> - </p> - </content> - </shape> - <shape width="359" height="134" topLeftX="37" topLeftY="108" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(31, 35, 41, 1)">核心数据可以涵盖各个方面,包括销售额、利润率、市场份额、客户满意度等。它们为决策者提供了洞察力,帮助他们了解业务的健康状况、趋势和问题所在。</span> - </p> - <p/> - <p> - <span color="rgba(31, 35, 41, 1)">通过对核心数据的分析,组织能够制定战略、优化资源配置、改进业务流程,并迅速做出应对市场变化的决策。</span> - </p> - </content> - </shape> - <shape width="268" height="267" topLeftX="396" topLeftY="224" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.9) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <border color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="229" height="85" topLeftX="416" topLeftY="305" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <span fontSize="54"> 660万</span> - </p> - </content> - </shape> - <shape width="248" height="33" topLeftX="406" topLeftY="374" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">销售额</span> - </p> - </content> - </shape> - <shape width="204" height="203" topLeftX="683" topLeftY="211" type="ellipse"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="19" color="rgba(255, 255, 255, 0.52)"/> - </shape> - <shape width="152" height="70" topLeftX="709" topLeftY="263" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="42">↑40%</span> - </strong> - </p> - </content> - </shape> - <shape width="189" height="34" topLeftX="691" topLeftY="321" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(54, 53, 88, 1)">市场份额</span> - </p> - </content> - </shape> - <shape width="171" height="170" topLeftX="562" topLeftY="59" type="ellipse"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="19" color="rgba(255, 255, 255, 0.52)"/> - </shape> - <shape width="127" height="70" topLeftX="583" topLeftY="95" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(54, 53, 88, 1)" fontSize="42">90%</span> - </strong> - </p> - </content> - </shape> - <shape width="159" height="34" topLeftX="569" topLeftY="151" alpha="0.6" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(54, 53, 88, 1)">用户满意度</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="HVuBbmbytoOcNixScvUcmj0Unhf" width="480" height="498" topLeftX="480" topLeftY="42" alpha="0.17"> - <crop type="rect" leftOffset="0" rightOffset="35" topOffset="0" bottomOffset="15"/> - </img> - <shape width="493" height="44" topLeftX="126" topLeftY="275" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(51, 112, 255, 1)" fontSize="16">对齐新一年的目标和策略</span> - </p> - </content> - </shape> - <shape width="627" height="85" topLeftX="126" topLeftY="187" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="54">202</span> - </strong> - <strong> - <span fontSize="54">6</span> - </strong> - <strong> - <span fontSize="54"> 年规划</span> - </strong> - </p> - </content> - </shape> - <shape width="112" height="93" topLeftX="33" topLeftY="187" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(51, 112, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(124deg,rgba(155, 177, 255, 1) 0%,rgba(210, 199, 255, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="132" height="44" topLeftX="513" topLeftY="930" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" autoFit="shape-auto-fit" wrap="false"/> - </shape> - <shape width="320" height="320" topLeftX="518" topLeftY="107" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="347" height="136" topLeftX="37" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">策略分析是一种评估和解析组织或个人在达成目标时采取的行动计划的过程。它涉及对内外部环境的综合分析,以确定适合当前情况和目标的最佳行动方案。</span> - </p> - <p/> - <p> - <span fontSize="12">策略分析的目的是帮助决策者更好地了解组织或个人所面临的挑战和机遇,并制定可行的策略来应对这些情况</span> - </p> - </content> - </shape> - <shape width="347" height="64" topLeftX="37" topLeftY="263" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="36">我们的策略</span> - </strong> - </p> - </content> - </shape> - <shape width="265" height="265" topLeftX="546" topLeftY="135" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="24" height="18" topLeftX="668" topLeftY="98" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="24" height="18" topLeftX="806" topLeftY="336" rotation="210" type="triangle"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="24" height="18" topLeftX="527" topLeftY="335" rotation="330" type="triangle"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="231" height="44" topLeftX="563" topLeftY="245" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">公司使命、愿景和价值观</span> - </strong> - </p> - </content> - </shape> - <shape width="130" height="130" topLeftX="480" topLeftY="112" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)" bold="true"> - <p> - <strong> - <span color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)">业务目标与战略</span> - </strong> - </p> - </content> - </shape> - <shape width="130" height="130" topLeftX="750" topLeftY="112" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)" bold="true"> - <p> - <strong> - <span color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)">行业趋势</span> - </strong> - </p> - </content> - </shape> - <shape width="130" height="130" topLeftX="613" topLeftY="359" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)" bold="true"> - <p> - <span color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)">用户需求</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XFfgb8GIRoIWZzxycb3cXWMLnS8" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="180" height="180" topLeftX="69" topLeftY="169" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.902) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">OKR</span> - </strong> - </p> - </content> - </shape> - <img src="HH7rbztBUoBX4SxqQFJc015FnHh" width="217" height="452" topLeftX="253" topLeftY="33"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="21" presetHandlers="0"/> - </img> - <shape width="408" height="71" topLeftX="439" topLeftY="82" presetHandlers="67" type="round-rect"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <strong> - <em> - <span fontSize="16">目标一:年度总销售额突破 1000万</span> - </em> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="64" height="64" topLeftX="406" topLeftY="86" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.9) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">01</span> - </strong> - </p> - </content> - </shape> - <shape width="408" height="71" topLeftX="439" topLeftY="180" presetHandlers="67" type="round-rect"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <strong> - <em> - <span fontSize="16">目标二:新产品X上线,市场占有率达到 20%</span> - </em> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="64" height="64" topLeftX="406" topLeftY="183" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.9) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">02</span> - </strong> - </p> - </content> - </shape> - <shape width="408" height="71" topLeftX="439" topLeftY="277" presetHandlers="67" type="round-rect"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <strong> - <em> - <span fontSize="16">目标三:年度用户满意度达到 90%</span> - </em> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="64" height="64" topLeftX="406" topLeftY="281" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.9) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">03</span> - </strong> - </p> - </content> - </shape> - <shape width="408" height="71" topLeftX="439" topLeftY="375" presetHandlers="67" type="round-rect"> - <fill> - <fillColor color="rgba(254, 254, 255, 0.702)"/> - </fill> - <border color="rgba(255, 255, 255, 0.71)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <strong> - <em> - <span fontSize="16">目标四:客户复购率达到 80%</span> - </em> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="64" height="64" topLeftX="406" topLeftY="379" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 0.9) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">04</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="KOHQb0T3Kouv6NxX3lycHwvrnLd" width="442" height="494" topLeftX="518" topLeftY="46"> - <crop type="rect" leftOffset="0" rightOffset="52" topOffset="0" bottomOffset="0"/> - </img> - <shape width="493" height="44" topLeftX="126" topLeftY="275" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(51, 112, 255, 1)" fontSize="16">当面解答公司内部高频问题</span> - </p> - </content> - </shape> - <shape width="627" height="93" topLeftX="126" topLeftY="187" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="54">Q&A</span> - </strong> - </p> - </content> - </shape> - <shape width="112" height="93" topLeftX="33" topLeftY="187" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(51, 112, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="AkfFbXJtZoBnSpx4bZecGd3Pnxe" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="F4uob6k5aoLElPx01GdcxiB2nwg" width="72" height="72" topLeftX="763" topLeftY="428"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="788" height="398" topLeftX="86" topLeftY="71" presetHandlers="24" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.71)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <img src="Il4nb9FTAoWv0VxZaxNcafghnWg" width="112" height="112" topLeftX="39" topLeftY="112"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="348" height="56" topLeftX="306" topLeftY="153" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(54, 53, 88, 1)" textAlign="center"> - <p> - <span color="rgba(54, 53, 88, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="672" height="74" topLeftX="144" topLeftY="86" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>Q&A</p> - </content> - </shape> - <shape width="60" height="44" topLeftX="201" topLeftY="219" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Q1</span> - </strong> - </p> - </content> - </shape> - <shape width="502" height="44" topLeftX="278" topLeftY="219" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>2026年公司重点投入的方向是什么?</strong> - </p> - </content> - </shape> - <shape width="60" height="44" topLeftX="201" topLeftY="287" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Q2</span> - </strong> - </p> - </content> - </shape> - <shape width="503" height="44" topLeftX="278" topLeftY="287" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>AI发展是否会影响到公司的招聘策略,对一线的员工有哪些影响?</strong> - </p> - </content> - </shape> - <shape width="60" height="44" topLeftX="201" topLeftY="355" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 86, 255, 1) 0%,rgba(110, 124, 249, 1) 100%,rgba(163, 172, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Q3</span> - </strong> - </p> - </content> - </shape> - <shape width="503" height="44" topLeftX="278" topLeftY="355" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>问题3...</strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="RODFb1dufol5tsxbTpNcU9cbnid" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="341" height="379" topLeftX="511" topLeftY="73" presetHandlers="18" alpha="0.76" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.78) 0%,rgba(255, 255, 255, 0.23) 19%,rgba(255, 255, 255, 0.63) 71%,rgba(255, 255, 255, 1) 100%)"/> - </fill> - <border color="linear-gradient(124deg,rgba(103, 149, 255, 1) 0%,rgba(208, 164, 255, 1) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(24, 25, 59, 0.06)"/> - </shape> - <shape width="324" height="52" topLeftX="519" topLeftY="391" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)">满意度问卷</span> - </strong> - </p> - </content> - </shape> - <img src="UizCbqwb9oqwLBxwQLPcziHxnKg" width="293" height="293" topLeftX="537" topLeftY="95"> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.05)"/> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="16"/> - </img> - <shape width="288" height="44" topLeftX="71" topLeftY="394" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(54, 53, 88, 1)" textAlign="left"> - <p>感谢您的参与</p> - </content> - </shape> - <shape width="409" height="133" topLeftX="67" topLeftY="279" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span fontSize="80">全员大会</span> - </strong> - </p> - </content> - </shape> - <shape width="229" height="69" topLeftX="71" topLeftY="235" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(54, 53, 88, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="36">202</span> - </strong> - <strong> - <span fontSize="36">6</span> - </strong> - <strong> - <span fontSize="36"> </span> - </strong> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="36">Q</span> - </strong> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="36">1</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/administration--annual_gala.xml b/skills/lark-slides/assets/templates/administration--annual_gala.xml deleted file mode 100644 index 3f1591bd1..000000000 --- a/skills/lark-slides/assets/templates/administration--annual_gala.xml +++ /dev/null @@ -1,1160 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>企业年会 - - - - - - - <headline fontColor="#000000FF" fontSize="64"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="L8ckbEaLKotNZKxD2pkcf22EnO2" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="154" height="34" topLeftX="66" topLeftY="30" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="28" height="28" topLeftX="42" topLeftY="33" iconType="iconpark/Edit/radio-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="596" height="84" topLeftX="182" topLeftY="226" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">202</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">6</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64"> 年会盛典</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content> - <p/> - </content> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XwK1bInndo6rbMxomq3cF40nnwc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="52" topLeftX="548" topLeftY="374" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">0</span> - </strong> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">5</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="52" topLeftX="548" topLeftY="312" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">0</span> - </strong> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">4</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="52" topLeftX="548" topLeftY="250" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">0</span> - </strong> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">3</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="52" topLeftX="548" topLeftY="188" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">0</span> - </strong> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">2</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="52" topLeftX="548" topLeftY="126" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">01</span> - </strong> - </p> - </content> - </shape> - <shape width="320" height="56" topLeftX="632" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">抽奖活动</span> - </p> - </content> - </shape> - <shape width="320" height="56" topLeftX="632" topLeftY="312" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">新年展望</span> - </p> - </content> - </shape> - <shape width="320" height="56" topLeftX="632" topLeftY="250" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">文艺演出</span> - </p> - </content> - </shape> - <shape width="320" height="56" topLeftX="632" topLeftY="188" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">颁奖表彰</span> - </p> - </content> - </shape> - <shape width="320" height="56" topLeftX="632" topLeftY="126" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">年度回顾</span> - </p> - </content> - </shape> - <shape width="266" height="74" topLeftX="187" topLeftY="126" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="40">流程安排</span> - </p> - </content> - </shape> - <shape width="266" height="44" topLeftX="187" topLeftY="183" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)" fontSize="24">OVERVIEW</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YkPmbd8GyopGcDxWwVXchKsunSb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="136" topLeftX="56" topLeftY="315" presetHandlers="6" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)"/> - </fill> - </shape> - <shape width="429" height="107" topLeftX="68" topLeftY="329" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">年度回顾</span> - </strong> - </p> - </content> - </shape> - <img src="C6QobydO6ouO22xwxgEcgHz1njg" width="181" height="458" topLeftX="647" topLeftY="82"> - <crop type="rect" leftOffset="42" rightOffset="42" topOffset="0" bottomOffset="0"/> - </img> - <shape width="425" height="56" topLeftX="73" topLeftY="416" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">YEAR IN REVIEW</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </style> - <data> - <icon width="257" height="257" topLeftX="57" topLeftY="112" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(38deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 25%,rgba(255, 255, 255, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="257" height="257" topLeftX="349" topLeftY="113" rotation="270" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(14deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 18%,rgba(255, 255, 255, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="257" height="257" topLeftX="641" topLeftY="112" rotation="90" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(38deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 32%,rgba(255, 255, 255, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="200" height="92" topLeftX="89" topLeftY="369" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="200" height="92" topLeftX="381" topLeftY="369" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="200" height="92" topLeftX="673" topLeftY="369" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="JYsIbXjMgocyTMxMaoDcgxfDn7Z" width="194" height="194" topLeftX="89" topLeftY="144"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="187" height="187" topLeftX="92" topLeftY="148" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="156" topLeftY="202" iconType="iconpark/Abstract/hexagon-strip.svg"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="MNkVbr9sioyZ7gxDkrUcH5wxnOh" width="194" height="194" topLeftX="381" topLeftY="144"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="187" height="187" topLeftX="384" topLeftY="148" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="70" height="70" topLeftX="442" topLeftY="196" iconType="iconpark/Travel/mountain.svg"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" width="5" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="Kgjrb2pivobxibx3DFYcWSqvnNd" width="194" height="194" topLeftX="673" topLeftY="144"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="187" height="187" topLeftX="676" topLeftY="148" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="740" topLeftY="202" iconType="iconpark/Abstract/nine-points-connected.svg"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="189" height="42" topLeftX="89" topLeftY="270" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">创新</span> - </p> - </content> - </shape> - <shape width="198" height="42" topLeftX="381" topLeftY="270" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">超越</span> - </p> - </content> - </shape> - <shape width="189" height="42" topLeftX="673" topLeftY="270" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">引领</span> - </p> - </content> - </shape> - <shape width="404" height="45" topLeftX="278" topLeftY="74" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">KEY WORDS</span> - </p> - </content> - </shape> - <shape width="404" height="45" topLeftX="278" topLeftY="42" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">年度关键词</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YkPmbd8GyopGcDxWwVXchKsunSb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="136" topLeftX="56" topLeftY="315" presetHandlers="6" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)"/> - </fill> - </shape> - <img src="IiA9beJwtoQAS4xEscJc5IiRnyc" width="320" height="459" topLeftX="597" topLeftY="81"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="429" height="107" topLeftX="68" topLeftY="329" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">表彰颁奖</span> - </strong> - </p> - </content> - </shape> - <shape width="425" height="56" topLeftX="73" topLeftY="416" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">AWARDS CEREMONY</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XwK1bInndo6rbMxomq3cF40nnwc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="266" height="74" topLeftX="187" topLeftY="126" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>最佳团队</p> - </content> - </shape> - <shape width="266" height="44" topLeftX="187" topLeftY="183" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)" fontSize="24">BEST TEAMS</span> - </p> - </content> - </shape> - <shape width="479" height="105" topLeftX="480" topLeftY="68" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="306" height="56" topLeftX="595" topLeftY="112" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="306" height="52" topLeftX="595" topLeftY="75" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">团队 #1</span> - </p> - </content> - </shape> - <img src="T8A2bfoFTooWJ0xkR0VcmeJlnRd" width="90" height="90" topLeftX="488" topLeftY="75"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <icon width="48" height="48" topLeftX="509" topLeftY="96" iconType="iconpark/Travel/enquire.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="479" height="105" topLeftX="480" topLeftY="368" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="306" height="56" topLeftX="595" topLeftY="412" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="306" height="52" topLeftX="595" topLeftY="375" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">团队 #3</span> - </p> - </content> - </shape> - <img src="T8A2bfoFTooWJ0xkR0VcmeJlnRd" width="90" height="90" topLeftX="488" topLeftY="375"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <icon width="48" height="48" topLeftX="509" topLeftY="396" iconType="iconpark/Edit/application-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="479" height="105" topLeftX="480" topLeftY="218" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="306" height="56" topLeftX="595" topLeftY="262" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="306" height="52" topLeftX="595" topLeftY="225" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">团队 #2</span> - </p> - </content> - </shape> - <img src="T8A2bfoFTooWJ0xkR0VcmeJlnRd" width="90" height="90" topLeftX="488" topLeftY="225"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <icon width="48" height="48" topLeftX="509" topLeftY="246" iconType="iconpark/Music/ppt.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </style> - <data> - <shape width="517" height="232" topLeftX="-47" topLeftY="283" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="164" height="110" topLeftX="135" topLeftY="405" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - <p/> - </content> - </shape> - <img src="JA1tbQ10Vo3R8kxModMc1y3Hn5x" width="195" height="195" topLeftX="114" topLeftY="163"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="188" height="188" topLeftX="117" topLeftY="166" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <shape width="195" height="42" topLeftX="114" topLeftY="377" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">员工 #1</span> - </p> - </content> - </shape> - <img src="RzNlbzUFJoiXoBxbEDnc0K4ZnKg" width="175" height="175" topLeftX="124" topLeftY="173"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="337"/> - </img> - <shape width="517" height="232" topLeftX="221" topLeftY="283" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="164" height="110" topLeftX="403" topLeftY="405" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - <p/> - </content> - </shape> - <img src="JA1tbQ10Vo3R8kxModMc1y3Hn5x" width="195" height="195" topLeftX="383" topLeftY="163"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="188" height="188" topLeftX="386" topLeftY="166" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <shape width="195" height="42" topLeftX="383" topLeftY="377" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">员工 #1</span> - </p> - </content> - </shape> - <img src="SCqwbWqaSoqnq4xivnLc055Wn0y" width="175" height="175" topLeftX="393" topLeftY="173"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="337"/> - </img> - <shape width="517" height="232" topLeftX="490" topLeftY="283" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="164" height="110" topLeftX="672" topLeftY="405" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - <p/> - </content> - </shape> - <img src="JA1tbQ10Vo3R8kxModMc1y3Hn5x" width="195" height="195" topLeftX="651" topLeftY="163"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="188" height="188" topLeftX="655" topLeftY="166" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <shape width="195" height="42" topLeftX="651" topLeftY="377" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">员工 #1</span> - </p> - </content> - </shape> - <img src="VS2SbZ084o07LHxe2m4c2ko4nSe" width="175" height="175" topLeftX="661" topLeftY="173"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="337"/> - </img> - <shape width="404" height="45" topLeftX="278" topLeftY="74" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">BEST EMPLOYEE</span> - </p> - </content> - </shape> - <shape width="404" height="45" topLeftX="278" topLeftY="42" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">最佳个人</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YkPmbd8GyopGcDxWwVXchKsunSb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="136" topLeftX="56" topLeftY="315" presetHandlers="6" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)"/> - </fill> - </shape> - <img src="MuJkbzXdRo2gHuxkL50cWaOLn70" width="320" height="459" topLeftX="578" topLeftY="81"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="429" height="107" topLeftX="68" topLeftY="329" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">文艺演出</span> - </strong> - </p> - </content> - </shape> - <shape width="425" height="56" topLeftX="73" topLeftY="416" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">SHOW</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </style> - <data> - <shape width="328" height="334" topLeftX="133" topLeftY="140" presetHandlers="24" type="round-rect"> - <border color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="328" height="334" topLeftX="499" topLeftY="140" presetHandlers="24" type="round-rect"> - <border color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="150" height="56" topLeftX="155" topLeftY="400" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="150" height="44" topLeftX="155" topLeftY="364" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">节目活动 #1</span> - </p> - </content> - </shape> - <shape width="150" height="56" topLeftX="520" topLeftY="400" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="150" height="44" topLeftX="520" topLeftY="364" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">节目活动 #2</span> - </p> - </content> - </shape> - <img src="DnbNb14XhoI86Fx1cczcZtY0n1b" width="300" height="192" topLeftX="512" topLeftY="155"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="9" bottomOffset="99" presetHandlers="16"/> - </img> - <img src="RgX8bS9gsohIo4xs1ZHcRomyn9d" width="300" height="192" topLeftX="147" topLeftY="155"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="44" bottomOffset="64" presetHandlers="16"/> - </img> - <shape width="404" height="45" topLeftX="278" topLeftY="74" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">INTERACTIVE PROGRAMS</span> - </p> - </content> - </shape> - <shape width="404" height="45" topLeftX="278" topLeftY="42" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">互动节目</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </style> - <data> - <shape width="784" height="294" topLeftX="87" topLeftY="123" type="slides-full-round-rect"> - <border color="linear-gradient(90deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="GjCvbfhIDo6w6bxsWL9csjWHn9e" width="275" height="275" topLeftX="98" topLeftY="132"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HatbbDWDgozqYoxgr0ncX3uynMd" width="239" height="239" topLeftX="116" topLeftY="151"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="231" height="231" topLeftX="120" topLeftY="155" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <img src="CN4VbSqLAoepGzxbPy6chmOYn5b" width="210" height="210" topLeftX="131" topLeftY="165"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="105"/> - </img> - <shape width="373" height="85" topLeftX="439" topLeftY="217" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="48">节目名称</span> - </strong> - </p> - </content> - </shape> - <shape width="275" height="44" topLeftX="440" topLeftY="287" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">表演者: 马克,李天</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YkPmbd8GyopGcDxWwVXchKsunSb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="136" topLeftX="56" topLeftY="315" presetHandlers="6" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)"/> - </fill> - </shape> - <img src="I2j9bmjJmoJ7uQxywXYcn9tznqe" width="320" height="459" topLeftX="578" topLeftY="81"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="429" height="107" topLeftX="68" topLeftY="329" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">新年展望</span> - </strong> - </p> - </content> - </shape> - <shape width="425" height="56" topLeftX="73" topLeftY="416" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">NEW YEAR EXPECTATIONS</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </style> - <data> - <icon width="257" height="257" topLeftX="57" topLeftY="112" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(38deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 25%,rgba(255, 255, 255, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="257" height="257" topLeftX="349" topLeftY="113" rotation="270" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(14deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 18%,rgba(255, 255, 255, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="257" height="257" topLeftX="641" topLeftY="112" rotation="90" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(38deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 32%,rgba(255, 255, 255, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="200" height="92" topLeftX="89" topLeftY="399" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="200" height="92" topLeftX="381" topLeftY="399" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="200" height="92" topLeftX="673" topLeftY="399" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="JYsIbXjMgocyTMxMaoDcgxfDn7Z" width="194" height="194" topLeftX="89" topLeftY="144"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="187" height="187" topLeftX="92" topLeftY="148" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <img src="MNkVbr9sioyZ7gxDkrUcH5wxnOh" width="194" height="194" topLeftX="381" topLeftY="144"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="187" height="187" topLeftX="384" topLeftY="148" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <img src="Kgjrb2pivobxibx3DFYcWSqvnNd" width="194" height="194" topLeftX="673" topLeftY="144"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="187" height="187" topLeftX="676" topLeftY="148" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <img src="VsVBbQ9LzoHpwixzsaCcdUQAnfh" width="172" height="172" topLeftX="99" topLeftY="155"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="337"/> - </img> - <img src="TAR9bFyA1ob8ytxpyQac2inln6g" width="172" height="172" topLeftX="392" topLeftY="155"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="337"/> - </img> - <img src="Jn8ibSLhqoK6GqxZzcUcIlfSnVg" width="172" height="172" topLeftX="684" topLeftY="155"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="337"/> - </img> - <shape width="150" height="44" topLeftX="110" topLeftY="362" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">目标 #1</span> - </p> - </content> - </shape> - <shape width="150" height="44" topLeftX="405" topLeftY="362" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">目标 #2</span> - </p> - </content> - </shape> - <shape width="150" height="44" topLeftX="698" topLeftY="362" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">目标 #3</span> - </p> - </content> - </shape> - <shape width="404" height="45" topLeftX="278" topLeftY="74" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">OBJECTIVE</span> - </p> - </content> - </shape> - <shape width="404" height="45" topLeftX="278" topLeftY="42" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">发展目标</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XwK1bInndo6rbMxomq3cF40nnwc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="266" height="74" topLeftX="187" topLeftY="126" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="40">技术创新</span> - </p> - </content> - </shape> - <shape width="266" height="78" topLeftX="187" topLeftY="183" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)" fontSize="24">TECHNOLOGY INNOVATION</span> - </p> - </content> - </shape> - <shape width="292" height="56" topLeftX="468" topLeftY="107" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="292" height="52" topLeftX="469" topLeftY="69" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">创新方向 #1</span> - </p> - </content> - </shape> - <shape width="53" height="52" topLeftX="417" topLeftY="69" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">01</span> - </p> - </content> - </shape> - <shape width="292" height="56" topLeftX="557" topLeftY="252" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="292" height="52" topLeftX="558" topLeftY="214" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">创新方向 #2</span> - </p> - </content> - </shape> - <shape width="53" height="52" topLeftX="505" topLeftY="214" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">02</span> - </p> - </content> - </shape> - <shape width="292" height="56" topLeftX="640" topLeftY="397" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="292" height="52" topLeftX="642" topLeftY="359" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">创新方向 #3</span> - </p> - </content> - </shape> - <shape width="53" height="52" topLeftX="589" topLeftY="359" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="linear-gradient(330deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)" fontSize="24">03</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YkPmbd8GyopGcDxWwVXchKsunSb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="136" topLeftX="56" topLeftY="315" presetHandlers="6" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 1) 67%,rgba(69, 96, 245, 1) 100%)"/> - </fill> - </shape> - <img src="KzMYb7avko43Yfx9x0xcNiW2nrb" width="320" height="459" topLeftX="578" topLeftY="81"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="429" height="107" topLeftX="68" topLeftY="329" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="64">抽奖活动</span> - </strong> - </p> - </content> - </shape> - <shape width="425" height="56" topLeftX="73" topLeftY="416" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">LUCKY DRAW</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DNRebAhjeoGRz5xqm2pc3Z1cnbg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <icon width="342" height="342" topLeftX="225" topLeftY="99" alpha="0.15" iconType="iconpark/Base/loading-four.svg"> - <border color="linear-gradient(38deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 25%,rgba(255, 255, 255, 0) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="UgaYbXXJporI7xxUgpmcKqgLnze" width="245" height="245" topLeftX="272" topLeftY="148"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="NvtGbX1pco51LOxQwe1csYyHnGc" width="188" height="188" topLeftX="302" topLeftY="176"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="181" height="181" topLeftX="305" topLeftY="179" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="96" height="96" topLeftX="348" topLeftY="222" iconType="iconpark/Hardware/iphone.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="Wk3lbdbUGoIbB0xRy2scahdunre" width="90" height="90" topLeftX="643" topLeftY="353"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="87" height="87" topLeftX="645" topLeftY="355" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="48" height="48" topLeftX="664" topLeftY="374" iconType="iconpark/Hardware/new-computer.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="S0DWbxXSaoC8BQxaHaCcGskbnYb" width="90" height="90" topLeftX="643" topLeftY="225"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="87" height="87" topLeftX="645" topLeftY="226" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="48" height="48" topLeftX="664" topLeftY="246" iconType="iconpark/Game/nintendo-switch.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="G7dgb5XNbowIDfxxG89c5Enrnub" width="90" height="90" topLeftX="643" topLeftY="97"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="87" height="87" topLeftX="645" topLeftY="98" type="ellipse"> - <fill> - <fillColor color="rgba(16, 15, 21, 1)"/> - </fill> - </shape> - <icon width="48" height="48" topLeftX="664" topLeftY="118" iconType="iconpark/Travel/coconut-tree.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="160" height="56" topLeftX="743" topLeftY="134" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="743" topLeftY="98" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">奖项 #1</span> - </p> - </content> - </shape> - <shape width="160" height="56" topLeftX="743" topLeftY="261" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="743" topLeftY="225" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">奖项 #2</span> - </p> - </content> - </shape> - <shape width="160" height="56" topLeftX="743" topLeftY="390" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="743" topLeftY="353" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">奖项 #3</span> - </p> - </content> - </shape> - <shape width="160" height="56" topLeftX="369" topLeftY="426" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="209" topLeftY="427" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">特等奖项 </span> - </p> - </content> - </shape> - <shape width="404" height="53" topLeftX="42" topLeftY="136" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">AWARDS</span> - </p> - </content> - </shape> - <shape width="190" height="74" topLeftX="42" topLeftY="79" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="40">奖项设置</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="L8ckbEaLKotNZKxD2pkcf22EnO2" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="154" height="34" topLeftX="66" topLeftY="30" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="28" height="28" topLeftX="42" topLeftY="33" iconType="iconpark/Edit/radio-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="404" height="53" topLeftX="278" topLeftY="179" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24" bold="false">THANK YOU</span> - </p> - </content> - </shape> - <shape width="589" height="84" topLeftX="185" topLeftY="219" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="center"> - <p lineSpacing="multiple:1">感谢参与</p> - </content> - </shape> - </data> - <note> - <content> - <p/> - </content> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/administration--company_intro.xml b/skills/lark-slides/assets/templates/administration--company_intro.xml deleted file mode 100644 index d1bbed989..000000000 --- a/skills/lark-slides/assets/templates/administration--company_intro.xml +++ /dev/null @@ -1,1376 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>企业介绍 - - - - <headline fontColor="#000000FF" fontSize="32"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="PRKebXdploaWlnxYHvEc5dzVnnb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="Fy3PbjuDQozqAbxxxpxcAQOJn1U" width="241" height="87" topLeftX="515" topLeftY="453" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="28"/> - </img> - <img src="ChirbbFEtoEhfVxxkh1cdYqknbf" width="191" height="115" topLeftX="0" topLeftY="107" alpha="0.1"> - <crop type="rect" leftOffset="49" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="158" height="158" topLeftX="229" topLeftY="168" type="donut"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <shape width="416" height="110" topLeftX="323" topLeftY="214" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span fontSize="64">企业介绍模板</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="47" topLeftX="327" topLeftY="305" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <span fontSize="18">Enterprise promotion</span> - </p> - </content> - </shape> - <shape width="495" height="111" topLeftX="323" topLeftY="214" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.4" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"/> - </shape> - <shape width="72" height="38" topLeftX="64" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="18">LOGO</span> - </strong> - </p> - </content> - </shape> - <shape width="20" height="20" topLeftX="44" topLeftY="33" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="20" height="20" topLeftX="30" topLeftY="33" type="ellipse"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - </data> - <note> - <content> - <p/> - </content> - </note> - </slide> - <slide> - <style/> - <data> - <img src="UkEdbK1VEouPnpx1Q6BcQ8RFnL9" width="242" height="87" topLeftX="545" topLeftY="453" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="28"/> - </img> - <img src="SZhjbOWc5owSd6xKTauctJBMnRb" width="159" height="159" topLeftX="0" topLeftY="381" rotation="180"> - <crop type="rect" leftOffset="0.07" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <shape width="320" height="58" topLeftX="112" topLeftY="186" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">企业介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="107" height="104" topLeftX="121" topLeftY="136" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" bold="true" lineSpacing="multiple:1.4"> - <p> - <span fontSize="60">01</span> - </p> - </content> - </shape> - <shape width="320" height="58" topLeftX="495" topLeftY="186" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">文化与荣耀</span> - </strong> - </p> - </content> - </shape> - <shape width="107" height="104" topLeftX="503" topLeftY="136" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" bold="true" lineSpacing="multiple:1.4"> - <p> - <span fontSize="60">02</span> - </p> - </content> - </shape> - <shape width="320" height="58" topLeftX="112" topLeftY="310" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">产品服务</span> - </strong> - </p> - </content> - </shape> - <shape width="107" height="104" topLeftX="121" topLeftY="261" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" bold="true" lineSpacing="multiple:1.4"> - <p> - <span fontSize="60">03</span> - </p> - </content> - </shape> - <shape width="320" height="58" topLeftX="495" topLeftY="310" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">行业场景</span> - </strong> - </p> - </content> - </shape> - <shape width="107" height="104" topLeftX="503" topLeftY="261" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" bold="true" lineSpacing="multiple:1.4"> - <p> - <span fontSize="60">04</span> - </p> - </content> - </shape> - <shape width="440" height="64" topLeftX="185" topLeftY="49" alpha="0.5" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="false" lineSpacing="multiple:1.35"> - <p> - <span fontSize="32" bold="false">CONTENTS</span> - </p> - </content> - </shape> - <shape width="91" height="64" topLeftX="112" topLeftY="49" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">目录</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="280" height="136" topLeftX="158" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <img src="TrZJbtv5ZoHd73x4QIScqpBbntf" width="160" height="160" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0.08" rightOffset="160" topOffset="160" bottomOffset="0"/> - </img> - <img src="CQL6b6AkQoUjYyxcCNTcwESPnYe" width="193" height="116" topLeftX="0" topLeftY="295" alpha="0.1"> - <crop type="rect" leftOffset="50" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SOFfbWd8Mo1lwuxxEJOcD4f7ngb" width="411" height="205" topLeftX="652" topLeftY="192" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="205" bottomOffset="0"/> - </img> - <shape width="136" height="132" topLeftX="229" topLeftY="260" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="center"> - <p>01</p> - </content> - </shape> - <shape width="302" height="74" topLeftX="403" topLeftY="260" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="372" height="45" topLeftX="403" topLeftY="215" alpha="0.5" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" lineSpacing="multiple:1.35"> - <p>Enterprise introduction</p> - </content> - </shape> - <shape width="515" height="74" topLeftX="403" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="40">企业介绍</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="381" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">ENTERPRISE INTRODU</span> - <span fontSize="16">C</span> - <span fontSize="16">TION</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">企业介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="119" height="297" topLeftX="70" topLeftY="163" presetHandlers="120" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="89" height="89" topLeftX="86" topLeftY="356" iconType="iconpark/Game/handle-round.svg"> - <border color="rgba(255, 255, 255, 1)" width="7" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="XdB6bKBbGoQaAdxa1OZc0tBLnBc" width="278" height="298" topLeftX="202" topLeftY="162" exposure="-5" contrast="12" saturation="-16"> - <crop type="rect" leftOffset="10" rightOffset="10" topOffset="0" bottomOffset="0" presetHandlers="20"/> - </img> - <shape width="278" height="44" topLeftX="533" topLeftY="206" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 196, 25, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="16">企业定位</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="533" topLeftY="236" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="278" height="44" topLeftX="533" topLeftY="316" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 196, 25, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="16">企业</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="533" topLeftY="346" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">ENTERPRISE INTRODU</span> - <span fontSize="16">C</span> - <span fontSize="16">TION</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">企业介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="120" topLeftX="108" topLeftY="177" type="ellipse"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="138" topLeftY="207" iconType="iconpark/Travel/local.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="120" height="120" topLeftX="317" topLeftY="177" type="ellipse"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <icon width="64" height="64" topLeftX="345" topLeftY="205" iconType="iconpark/Travel/mountain.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="120" height="120" topLeftX="526" topLeftY="177" type="ellipse"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="556" topLeftY="207" iconType="iconpark/Office/announcement.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="120" height="120" topLeftX="736" topLeftY="177" type="ellipse"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <icon width="64" height="64" topLeftX="763" topLeftY="205" iconType="iconpark/Travel/planet.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="190" height="92" topLeftX="73" topLeftY="352" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="190" height="44" topLeftX="73" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 196, 25, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="16">企业定位</span> - </strong> - </p> - </content> - </shape> - <shape width="190" height="92" topLeftX="282" topLeftY="352" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="190" height="44" topLeftX="282" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 196, 25, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="16">企业使命</span> - </strong> - </p> - </content> - </shape> - <shape width="190" height="92" topLeftX="491" topLeftY="352" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="190" height="44" topLeftX="491" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 196, 25, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="16">企业宗旨</span> - </strong> - </p> - </content> - </shape> - <shape width="190" height="92" topLeftX="701" topLeftY="352" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="190" height="44" topLeftX="701" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 196, 25, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="16">企业愿景</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="LfBEbmLvGoKkfHxm5aHcDyhgnyd" width="255" height="80" topLeftX="94" topLeftY="460" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="381" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <shape width="297" height="110" topLeftX="94" topLeftY="246" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="372" height="44" topLeftX="94" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">TEAM INTRODUCTION</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="94" topLeftY="154" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">团队介绍</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">ENTERPRISE INTRODUTION</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">企业介绍</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="280" height="136" topLeftX="158" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <img src="TrZJbtv5ZoHd73x4QIScqpBbntf" width="160" height="160" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0.08" rightOffset="160" topOffset="160" bottomOffset="0"/> - </img> - <img src="CQL6b6AkQoUjYyxcCNTcwESPnYe" width="193" height="116" topLeftX="0" topLeftY="295" alpha="0.1"> - <crop type="rect" leftOffset="50" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SOFfbWd8Mo1lwuxxEJOcD4f7ngb" width="411" height="205" topLeftX="652" topLeftY="192" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="205" bottomOffset="0"/> - </img> - <shape width="136" height="132" topLeftX="229" topLeftY="260" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="center"> - <p>02</p> - </content> - </shape> - <shape width="302" height="74" topLeftX="403" topLeftY="260" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="372" height="53" topLeftX="403" topLeftY="215" alpha="0.5" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" lineSpacing="multiple:1.35"> - <p> - <span fontSize="24" bold="false">CULTURE AND HONOR</span> - </p> - </content> - </shape> - <shape width="515" height="60" topLeftX="403" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="40">文化与荣耀</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="381" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">TEAM INTRODUCTION</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">文化与荣耀</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="44" topLeftX="656" topLeftY="249" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 196, 25, 1)" fontSize="18">国家荣誉</span> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="656" topLeftY="279" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="261" height="44" topLeftX="656" topLeftY="135" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 196, 25, 1)" fontSize="18">国际荣誉</span> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="656" topLeftY="165" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="261" height="44" topLeftX="656" topLeftY="363" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 196, 25, 1)" fontSize="18">地区荣誉</span> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="656" topLeftY="393" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <img src="GIxhbt0NxoGYgjxSRUacyksEnYf" width="203" height="310" topLeftX="423" topLeftY="145" exposure="4" contrast="-5" temperature="-100"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="ULEIb8QLhoMCi1xn0JWcuQrInUb" width="155" height="310" topLeftX="77" topLeftY="145" saturation="16" temperature="-32"> - <crop type="rect" leftOffset="27" rightOffset="27" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="Pti2bi2QTo2qbzx73wkcCpxon2S" width="155" height="310" topLeftX="250" topLeftY="145" saturation="20"> - <crop type="rect" leftOffset="27" rightOffset="27" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">TEAM INTRODUCTION</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">文化与荣耀</span> - </strong> - </p> - </content> - </shape> - <img src="ExqybzOPBoAFAkxfJZFczEejnth" width="48" height="97" topLeftX="252" topLeftY="178"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="PBD2bJubkon53MxFmJXcRQBXn3e" width="51" height="97" topLeftX="89" topLeftY="178"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="130" height="47" topLeftX="131" topLeftY="184" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="18">20XX.04.04</span> - </strong> - </p> - </content> - </shape> - <shape width="130" height="56" topLeftX="131" topLeftY="221" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="ExqybzOPBoAFAkxfJZFczEejnth" width="48" height="97" topLeftX="537" topLeftY="178"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="PBD2bJubkon53MxFmJXcRQBXn3e" width="51" height="97" topLeftX="375" topLeftY="178"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="130" height="47" topLeftX="417" topLeftY="184" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="18">20XX.04.04</span> - </strong> - </p> - </content> - </shape> - <shape width="130" height="56" topLeftX="417" topLeftY="221" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="ExqybzOPBoAFAkxfJZFczEejnth" width="48" height="97" topLeftX="823" topLeftY="178"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="PBD2bJubkon53MxFmJXcRQBXn3e" width="51" height="97" topLeftX="660" topLeftY="178"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="130" height="47" topLeftX="703" topLeftY="184" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="center"> - <p> - <strong>20XX.04.04</strong> - </p> - </content> - </shape> - <shape width="130" height="56" topLeftX="703" topLeftY="221" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="VZKobRX1FoTKOLx5W2dclHU8n4g" width="48" height="97" topLeftX="252" topLeftY="346"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="MD0bb2phrogzu4xF0S3c8nIcnnb" width="51" height="97" topLeftX="89" topLeftY="346"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="130" height="47" topLeftX="131" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="center"> - <p> - <strong>20XX.04.04</strong> - </p> - </content> - </shape> - <shape width="130" height="56" topLeftX="131" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="VZKobRX1FoTKOLx5W2dclHU8n4g" width="48" height="97" topLeftX="537" topLeftY="346"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="MD0bb2phrogzu4xF0S3c8nIcnnb" width="51" height="97" topLeftX="375" topLeftY="346"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="130" height="47" topLeftX="417" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="center"> - <p> - <strong>20XX.04.04</strong> - </p> - </content> - </shape> - <shape width="130" height="56" topLeftX="417" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <img src="VZKobRX1FoTKOLx5W2dclHU8n4g" width="48" height="97" topLeftX="823" topLeftY="346"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="MD0bb2phrogzu4xF0S3c8nIcnnb" width="51" height="97" topLeftX="660" topLeftY="346"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="130" height="47" topLeftX="703" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="center"> - <p> - <strong>20XX.04.04</strong> - </p> - </content> - </shape> - <shape width="130" height="56" topLeftX="703" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="280" height="136" topLeftX="158" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <img src="TrZJbtv5ZoHd73x4QIScqpBbntf" width="160" height="160" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0.08" rightOffset="160" topOffset="160" bottomOffset="0"/> - </img> - <img src="CQL6b6AkQoUjYyxcCNTcwESPnYe" width="193" height="116" topLeftX="0" topLeftY="295" alpha="0.1"> - <crop type="rect" leftOffset="50" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SOFfbWd8Mo1lwuxxEJOcD4f7ngb" width="411" height="205" topLeftX="652" topLeftY="192" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="205" bottomOffset="0"/> - </img> - <shape width="136" height="132" topLeftX="229" topLeftY="260" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="center"> - <p>03</p> - </content> - </shape> - <shape width="302" height="74" topLeftX="403" topLeftY="260" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="372" height="45" topLeftX="403" topLeftY="215" alpha="0.5" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" lineSpacing="multiple:1.35"> - <p>Enterprise introduction</p> - </content> - </shape> - <shape width="515" height="74" topLeftX="403" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="40">企业介绍</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="381" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">PRODUCT SERVICE</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">产品服务</span> - </strong> - </p> - </content> - </shape> - <img src="Iw33boP1DocNMHxSV16cG6Afncf" width="278" height="298" topLeftX="342" topLeftY="131"> - <crop type="rect" leftOffset="10" rightOffset="10" topOffset="0" bottomOffset="0" presetHandlers="40"/> - </img> - <shape width="105" height="105" topLeftX="565" topLeftY="371" type="ellipse"> - <border color="rgba(31, 35, 41, 1)" width="45" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="256" height="44" topLeftX="66" topLeftY="166" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 196, 25, 1)" fontSize="18">产品类型</span> - </p> - </content> - </shape> - <shape width="256" height="74" topLeftX="66" topLeftY="196" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="256" height="44" topLeftX="67" topLeftY="275" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 196, 25, 1)" fontSize="18">产品功能</span> - </p> - </content> - </shape> - <shape width="256" height="74" topLeftX="67" topLeftY="305" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="256" height="44" topLeftX="664" topLeftY="220" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <span color="rgba(255, 196, 25, 1)" fontSize="18">产品价值</span> - </p> - </content> - </shape> - <shape width="256" height="74" topLeftX="664" topLeftY="250" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">PRODUCT SERVICE</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">产品服务</span> - </strong> - </p> - </content> - </shape> - <shape width="310" height="310" topLeftX="326" topLeftY="149" alpha="0.15" type="ellipse"> - <border color="rgba(31, 35, 41, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="59" height="59" topLeftX="451" topLeftY="275" iconType="iconpark/Money/workbench.svg"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <border width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="161" height="161" topLeftX="401" topLeftY="224" type="ellipse"> - <border color="rgba(255, 196, 25, 1)" width="30" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="60" height="60" topLeftX="342" topLeftY="166" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">01</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="295" topLeftY="274" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">02</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="342" topLeftY="383" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">03</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="560" topLeftY="383" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">06</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="606" topLeftY="274" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">05</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="560" topLeftY="166" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">04</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="56" topLeftX="175" topLeftY="176" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="175" topLeftY="148" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">材料</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="56" topLeftX="139" topLeftY="315" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="139" topLeftY="287" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">材料</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="56" topLeftX="175" topLeftY="441" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="175" topLeftY="413" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">材料</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="56" topLeftX="666" topLeftY="176" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="666" topLeftY="148" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">材料</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="56" topLeftX="702" topLeftY="315" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="702" topLeftY="287" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">材料</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="56" topLeftX="666" topLeftY="441" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="666" topLeftY="413" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">材料</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="280" height="136" topLeftX="158" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - <img src="TrZJbtv5ZoHd73x4QIScqpBbntf" width="160" height="160" topLeftX="0" topLeftY="0" rotation="270"> - <crop type="rect" leftOffset="0.08" rightOffset="160" topOffset="160" bottomOffset="0"/> - </img> - <img src="CQL6b6AkQoUjYyxcCNTcwESPnYe" width="193" height="116" topLeftX="0" topLeftY="295" alpha="0.1"> - <crop type="rect" leftOffset="50" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SOFfbWd8Mo1lwuxxEJOcD4f7ngb" width="411" height="205" topLeftX="652" topLeftY="192" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="205" bottomOffset="0"/> - </img> - <shape width="136" height="132" topLeftX="229" topLeftY="260" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="center"> - <p>04</p> - </content> - </shape> - <shape width="302" height="74" topLeftX="403" topLeftY="260" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="372" height="45" topLeftX="403" topLeftY="215" alpha="0.5" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" lineSpacing="multiple:1.35"> - <p> - <span fontSize="18" bold="false">INDUSTRY PROSPECT</span> - </p> - </content> - </shape> - <shape width="515" height="60" topLeftX="403" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="40">行业前景</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="HgmJb3yJuoPwhJxuUUnc3Vrxnxe" width="159" height="159" topLeftX="0" topLeftY="381" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="159" topOffset="159" bottomOffset="0"/> - </img> - <img src="Xj50bmPHuoYxROxoDoLckOtFnmi" width="252" height="79" topLeftX="533" topLeftY="0" rotation="180" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="42"/> - </img> - <shape width="372" height="44" topLeftX="67" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">INDUSTRY PROSPECT</span> - </p> - </content> - </shape> - <shape width="372" height="64" topLeftX="67" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">行业前景</span> - </strong> - </p> - </content> - </shape> - <chart width="590" height="360" topLeftX="342" topLeftY="125"> - <chartPlotArea> - <chartPlot type="bar"> - <chartExtra> - <chartStack percentage="true"/> - </chartExtra> - <chartLabels position="center"/> - <chartSeriesList> - <chartSeries index="1"> - <chartBars color="rgb(38, 31, 31)"/> - </chartSeries> - <chartSeries index="2"> - <chartBars color="rgb(255, 196, 25)"/> - </chartSeries> - <chartSeries index="3"> - <chartBars color="rgb(255, 212, 88)"/> - </chartSeries> - <chartSeries index="4"> - <chartBars color="rgb(255, 224, 133)"/> - </chartSeries> - <chartSeries index="5"> - <chartBars color="rgb(255, 242, 202)"/> - </chartSeries> - </chartSeriesList> - </chartPlot> - <chartAxes> - <chartAxis type="y" position="left"/> - <chartAxis type="x"/> - </chartAxes> - </chartPlotArea> - <chartData> - <dim1> - <chartField name="">I love trying new product,I am satisfied with the product I currently use,I tend to learn about products online,I am happy to pay extra for quick and efficient feature,I spend more on products now than I used to</chartField> - </dim1> - <dim2> - <chartField name="Strongly agree">0.12,0.36,0.24,0.08,0.23</chartField> - <chartField name="Agree">0.28,0.12,0.24,0.3,0.17</chartField> - <chartField name="Neutral">0.4,0.12,0.36,0.22,0.1</chartField> - <chartField name="Disagree">0.1,0.2,0.07,0.28,0.25</chartField> - <chartField name="Strongly disagree">0.1,0.2,0.07,0.12,0.25</chartField> - </dim2> - </chartData> - <chartTitle/> - <chartStyle> - <chartColorTheme> - <color value="singleColorSeries-B-@v2"/> - </chartColorTheme> - </chartStyle> - </chart> - <shape width="590" height="359" topLeftX="342" topLeftY="126" type="rect"> - <border color="rgba(255, 255, 255, 1)" width="7" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="47" topLeftX="67" topLeftY="369" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="18">03</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="67" topLeftY="407" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="261" height="47" topLeftX="67" topLeftY="254" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="18">02</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="67" topLeftY="292" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="261" height="47" topLeftX="67" topLeftY="139" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 196, 25, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 196, 25, 1)" fontSize="18">01</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="74" topLeftX="67" topLeftY="177" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="PRKebXdploaWlnxYHvEc5dzVnnb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="Fy3PbjuDQozqAbxxxpxcAQOJn1U" width="241" height="87" topLeftX="515" topLeftY="453" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="28"/> - </img> - <img src="ChirbbFEtoEhfVxxkh1cdYqknbf" width="191" height="115" topLeftX="0" topLeftY="107" alpha="0.1"> - <crop type="rect" leftOffset="49" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="416" height="110" topLeftX="253" topLeftY="193" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span fontSize="64">感谢您的观赏</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="47" topLeftX="257" topLeftY="284" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <span fontSize="18">THANK YOU</span> - </p> - </content> - </shape> - <shape width="72" height="38" topLeftX="64" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="18">LOGO</span> - </strong> - </p> - </content> - </shape> - <shape width="20" height="20" topLeftX="44" topLeftY="33" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="20" height="20" topLeftX="30" topLeftY="33" type="ellipse"> - <fill> - <fillColor color="rgba(255, 196, 25, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/administration--corporate_culture.xml b/skills/lark-slides/assets/templates/administration--corporate_culture.xml deleted file mode 100644 index 1be428090..000000000 --- a/skills/lark-slides/assets/templates/administration--corporate_culture.xml +++ /dev/null @@ -1,1765 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>企业文化宣传 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="374" topLeftX="31" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(172, 175, 181, 1)"/> - </fill> - </shape> - <img src="Nw3pbLRCVoSKVMxNJJ2cdJaUnAn" width="270" height="432" topLeftX="635" topLeftY="69" flipX="true" exposure="8" saturation="-100"> - <crop type="rect" leftOffset="114" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="55" height="371" topLeftX="905" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="100" height="24" topLeftX="805" topLeftY="371" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <img src="CGuCbw8Tboqg2VxtQdWcbFhQnne" width="53" height="53" topLeftX="878" topLeftY="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="32" height="169" topLeftX="0" topLeftY="371" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="490" height="101" topLeftX="48" topLeftY="352" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true"> - <p>企业文化宣传</p> - </content> - </shape> - <shape width="137" height="44" topLeftX="52" topLeftY="451" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(116, 119, 122, 1)" bold="false"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="16" bold="false">汇报人:小李</span> - </p> - </content> - </shape> - <shape width="137" height="44" topLeftX="199" topLeftY="451" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(116, 119, 122, 1)" bold="false"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="16" bold="false">2026 / 10 / 23</span> - </p> - </content> - </shape> - <line startX="185" startY="465" endX="185" endY="485"> - <border color="rgba(172, 175, 181, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="54" height="41" topLeftX="78" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="AFsQbNvkVooQFYxLPFucGo81nge" width="26" height="26" topLeftX="56" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="932" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(172, 175, 181, 1)"/> - </fill> - </shape> - <shape width="55" height="94" topLeftX="905" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="52" height="28" topLeftX="920" topLeftY="446" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="131" height="414" topLeftX="262" topLeftY="94" rotation="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <img src="JzS9bSzFYoEnwxx8hQ2ciCvened" width="306" height="366" topLeftX="57" topLeftY="119" exposure="19" saturation="-100"> - <crop type="rect" leftOffset="24" rightOffset="31" topOffset="36" bottomOffset="34" presetHandlers="0"/> - </img> - <shape width="457" height="77" topLeftX="434" topLeftY="167" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p> - <span fontSize="38">前言</span> - </p> - </content> - </shape> - <shape width="456" height="74" topLeftX="436" topLeftY="247" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="248" height="41" topLeftX="73" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="NQh5bzWRwo3Rdfx73FzcGtLanzd" width="26" height="26" topLeftX="51" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="960" height="270" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <img src="G5u8bcdFcogtlExDIW0cU3ranZg" width="960" height="270" topLeftX="0" topLeftY="0" alpha="0.3" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="134" bottomOffset="134" presetHandlers="0"/> - </img> - <shape width="206" height="129" topLeftX="0" topLeftY="71" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="113" height="36" topLeftX="486" topLeftY="308" alpha="0.06" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong>3</strong> - </p> - </content> - </shape> - <shape width="113" height="36" topLeftX="714" topLeftY="308" alpha="0.06" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong>4</strong> - </p> - </content> - </shape> - <shape width="330" height="80" topLeftX="48" topLeftY="83" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="40">目录</span> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="50" topLeftY="146" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14" bold="false">输入副标题</span> - </p> - </content> - </shape> - <shape width="206" height="100" topLeftX="49" topLeftY="308" alpha="0.05" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="80">01</span> - </strong> - </p> - </content> - </shape> - <shape width="206" height="59" topLeftX="49" topLeftY="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">公司介绍</span> - </p> - </content> - </shape> - <shape width="206" height="56" topLeftX="49" topLeftY="408" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="206" height="100" topLeftX="268" topLeftY="308" alpha="0.05" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="80">02</span> - </strong> - </p> - </content> - </shape> - <shape width="206" height="59" topLeftX="268" topLeftY="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p>公司愿景</p> - </content> - </shape> - <shape width="206" height="56" topLeftX="268" topLeftY="408" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="206" height="100" topLeftX="486" topLeftY="308" alpha="0.05" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="80">03</span> - </strong> - </p> - </content> - </shape> - <shape width="206" height="59" topLeftX="486" topLeftY="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">产品介绍</span> - </p> - </content> - </shape> - <shape width="206" height="56" topLeftX="486" topLeftY="408" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="206" height="100" topLeftX="705" topLeftY="308" alpha="0.05" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="80">04</span> - </strong> - </p> - </content> - </shape> - <shape width="206" height="59" topLeftX="705" topLeftY="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p>战略规划</p> - </content> - </shape> - <shape width="206" height="56" topLeftX="705" topLeftY="408" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YDWabyhLGoz1IAx2kdlcR7YTnG5" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="1" height="402" topLeftX="930" topLeftY="84" flipX="true" alpha="0.5" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="56" height="30" topLeftX="889" topLeftY="497" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="30" height="85" topLeftX="930" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="254" height="56" topLeftX="199" topLeftY="271" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(116, 119, 122, 1)"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="400" height="77" topLeftX="196" topLeftY="205" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span fontSize="38">公司介绍</span> - </p> - </content> - </shape> - <shape width="122" height="94" topLeftX="84" topLeftY="193" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="74" color="rgba(255, 104, 68, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 104, 68, 1)" fontSize="74">01</span> - </strong> - </p> - </content> - </shape> - <line startX="86" startY="217" endX="55" endY="273"> - <border width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="248" height="41" topLeftX="73" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="NQh5bzWRwo3Rdfx73FzcGtLanzd" width="26" height="26" topLeftX="51" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="FGVdbv20Uo0H78xXFCDca2FinEd" width="690" height="486" topLeftX="0" topLeftY="54" exposure="3" contrast="-3" saturation="-100"> - <crop type="rect" leftOffset="185" rightOffset="172" topOffset="101" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="424" height="309" topLeftX="481" topLeftY="145" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="45" height="45" topLeftX="0" topLeftY="54" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="376" height="68" topLeftX="504" topLeftY="201" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p> - <span fontSize="32">公司概述</span> - </p> - </content> - </shape> - <shape width="376" height="92" topLeftX="506" topLeftY="334" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="74" height="10" topLeftX="515" topLeftY="184" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <img src="CGuCbw8Tboqg2VxtQdWcbFhQnne" width="53" height="53" topLeftX="878" topLeftY="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="30" height="67" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="850" height="56" topLeftX="45" topLeftY="119" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="572" height="69" topLeftX="45" topLeftY="44" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Arial Black" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial Black">发展历程</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - </style> - <data> - <line startX="79" startY="292" endX="79" endY="465"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="702" startY="294" endX="702" endY="466"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="741" startY="466" endX="703" endY="466"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="737" startY="338" endX="701" endY="338"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="737" startY="404" endX="701" endY="404"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="118" startY="465" endX="80" endY="465"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="114" startY="337" endX="78" endY="337"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="114" startY="402" endX="78" endY="402"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="462" startY="148" endX="462" endY="238"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="755" startY="227" endX="131" endY="227"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="131" startY="226" endX="131" endY="248"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="462" startY="226" endX="462" endY="248"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="755" startY="226" endX="755" endY="248"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="574" startY="185" endX="462" endY="185"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="165" height="58" topLeftX="559" topLeftY="157" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="613" topLeftY="154" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(246, 246, 246, 1)" bold="true"> - <p> - <span color="rgba(246, 246, 246, 1)">总经理</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="613" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(239, 219, 211, 1)"> - <p> - <span color="rgba(239, 219, 211, 1)" fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="UPkebcdE1oy6NtxIMlzclVaNnWd" width="49" height="49" topLeftX="564" topLeftY="161" exposure="-4" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="380" topLeftY="96" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="434" topLeftY="93" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">董事会</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="434" topLeftY="117" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(184, 184, 184, 1)"> - <p> - <span color="rgba(184, 184, 184, 1)" fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="MztAbK7Ykos8qOxXujKcCd7Kn3d" width="49" height="49" topLeftX="384" topLeftY="101" exposure="1" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="50" topLeftY="241" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="104" topLeftY="239" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>行政部</strong> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="104" topLeftY="263" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="EVxRbnLE5osTcMxaxZAcJ4O6nld" width="49" height="49" topLeftX="55" topLeftY="246" exposure="1" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="361" topLeftY="241" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="416" topLeftY="239" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>产研部</strong> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="416" topLeftY="263" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="C4SSbCFbpoCE4exRWzjcD6MGnWf" width="49" height="49" topLeftX="367" topLeftY="246" exposure="-8" contrast="15" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="673" topLeftY="241" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="728" topLeftY="239" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>市场部</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="728" topLeftY="263" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="P0BRbWkhsousWJxYywacDaYcnfh" width="49" height="49" topLeftX="679" topLeftY="246" exposure="-8" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="572" height="69" topLeftX="45" topLeftY="44" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Arial Black" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial Black">组织架构</span> - </p> - </content> - </shape> - <shape width="165" height="58" topLeftX="113" topLeftY="313" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="168" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>财务部</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="168" topLeftY="334" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="EVxRbnLE5osTcMxaxZAcJ4O6nld" width="49" height="49" topLeftX="119" topLeftY="317" exposure="1" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="113" topLeftY="376" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="168" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>人事处</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="168" topLeftY="398" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="EVxRbnLE5osTcMxaxZAcJ4O6nld" width="49" height="49" topLeftX="119" topLeftY="381" exposure="1" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="113" topLeftY="440" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="168" topLeftY="437" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>后勤部</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="168" topLeftY="461" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="EVxRbnLE5osTcMxaxZAcJ4O6nld" width="49" height="49" topLeftX="119" topLeftY="444" exposure="1" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="425" topLeftY="313" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="479" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>前端</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="479" topLeftY="334" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p>副标题</p> - </content> - </shape> - <img src="VAyqbIxsLo0EznxQquEcu5ixn1g" width="49" height="49" topLeftX="430" topLeftY="317" exposure="-9" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="425" topLeftY="376" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="479" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>服务端</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="479" topLeftY="398" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p>副标题</p> - </content> - </shape> - <img src="VAyqbIxsLo0EznxQquEcu5ixn1g" width="49" height="49" topLeftX="430" topLeftY="381" exposure="-9" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="736" topLeftY="313" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="791" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>销售部</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="791" topLeftY="334" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="DAizb7LdCoiG36xNHDhcTgvWnVb" width="49" height="49" topLeftX="742" topLeftY="317" exposure="-8" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="736" topLeftY="440" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="791" topLeftY="437" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>品牌部</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="791" topLeftY="461" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="DAizb7LdCoiG36xNHDhcTgvWnVb" width="49" height="49" topLeftX="742" topLeftY="444" exposure="-8" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="736" topLeftY="376" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="791" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>客服部</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="791" topLeftY="398" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span fontSize="12">副标题</span> - </p> - </content> - </shape> - <img src="DQxgb7Ok9oz6p3xUXkucZKZInRg" width="49" height="49" topLeftX="742" topLeftY="381" exposure="-8" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <shape width="165" height="58" topLeftX="425" topLeftY="440" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="99" height="44" topLeftX="479" topLeftY="437" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>测试</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="479" topLeftY="461" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p>副标题</p> - </content> - </shape> - <img src="YWw1bGQxJozaiqxPUYAc7rjAnBg" width="49" height="49" topLeftX="430" topLeftY="444" exposure="-9" contrast="12" saturation="-100"> - <crop type="rect" leftOffset="19" rightOffset="19" topOffset="0" bottomOffset="0" presetHandlers="30"/> - </img> - <line startX="391" startY="294" endX="391" endY="466"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="429" startY="466" endX="392" endY="466"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="426" startY="338" endX="390" endY="338"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="426" startY="404" endX="390" endY="404"> - <border color="rgba(219, 221, 225, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="TokNblhQbo6EvdxefALcm9HonKA" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="1" height="402" topLeftX="930" topLeftY="84" flipX="true" alpha="0.5" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="56" height="30" topLeftX="889" topLeftY="497" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="30" height="85" topLeftX="930" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="182" height="56" topLeftX="199" topLeftY="245" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(116, 119, 122, 1)"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="400" height="77" topLeftX="196" topLeftY="180" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span fontSize="38">企业文化</span> - </p> - </content> - </shape> - <shape width="122" height="94" topLeftX="84" topLeftY="168" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="74" color="rgba(255, 104, 68, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 104, 68, 1)" fontSize="74">02</span> - </strong> - </p> - </content> - </shape> - <line startX="86" startY="192" endX="55" endY="247"> - <border width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="248" height="41" topLeftX="73" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="Tgvqb7QwjojIMbxu7QIcy8mpnnf" width="26" height="26" topLeftX="51" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="30" height="67" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="257" height="540" topLeftX="703" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(238, 239, 239, 1)"/> - </fill> - </shape> - <shape width="376" height="69" topLeftX="45" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial Black">企业愿景</span> - </p> - </content> - </shape> - <img src="JhAsbKc0RoroepxyRx9clt0Znle" width="404" height="206" topLeftX="501" topLeftY="280" exposure="9" contrast="7" saturation="-100" temperature="-12"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="20" presetHandlers="0"/> - </img> - <img src="GqpNbBmK0oDUJ1xawgmcONDBnKc" width="404" height="206" topLeftX="501" topLeftY="54" exposure="8" contrast="4" saturation="-100" temperature="-27"> - <crop type="rect" leftOffset="4" rightOffset="4" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="435" height="56" topLeftX="45" topLeftY="190" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="435" height="50" topLeftX="45" topLeftY="148" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">愿景一</span> - </strong> - </p> - </content> - </shape> - <shape width="435" height="56" topLeftX="45" topLeftY="337" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="435" height="50" topLeftX="45" topLeftY="295" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">愿景二</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="272" height="154" topLeftX="55" topLeftY="158" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="35" height="35" topLeftX="82" topLeftY="182" iconType="iconpark/Peoples/peoples.svg"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </icon> - <shape width="176" height="56" topLeftX="122" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(172, 175, 181, 1)"> - <p> - <span color="rgba(172, 175, 181, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="176" height="53" topLeftX="121" topLeftY="172" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(50, 50, 50, 1)" bold="true"> - <p> - <span color="rgba(50, 50, 50, 1)" fontSize="22">服务客户</span> - </p> - </content> - </shape> - <shape width="272" height="154" topLeftX="632" topLeftY="158" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="176" height="56" topLeftX="698" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(172, 175, 181, 1)"> - <p> - <span color="rgba(172, 175, 181, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="176" height="53" topLeftX="698" topLeftY="172" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(50, 50, 50, 1)" bold="true"> - <p> - <span fontSize="22">开放包容</span> - </p> - </content> - </shape> - <icon width="35" height="35" topLeftX="657" topLeftY="182" iconType="iconpark/Abstract/triangle-round-rectangle.svg"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </icon> - <shape width="272" height="154" topLeftX="344" topLeftY="158" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <icon width="35" height="35" topLeftX="369" topLeftY="182" iconType="iconpark/Edit/star.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </icon> - <shape width="176" height="56" topLeftX="411" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(239, 219, 211, 1)"> - <p> - <span color="rgba(239, 219, 211, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="176" height="53" topLeftX="410" topLeftY="172" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span fontSize="22">创新进取</span> - </p> - </content> - </shape> - <shape width="272" height="154" topLeftX="345" topLeftY="332" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="176" height="56" topLeftX="412" topLeftY="389" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(172, 175, 181, 1)"> - <p> - <span color="rgba(172, 175, 181, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="176" height="53" topLeftX="411" topLeftY="347" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(50, 50, 50, 1)" bold="true"> - <p> - <span fontSize="22">合作共赢</span> - </p> - </content> - </shape> - <icon width="35" height="35" topLeftX="372" topLeftY="357" iconType="iconpark/Abstract/two-semicircles.svg"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </icon> - <shape width="272" height="154" topLeftX="55" topLeftY="332" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </shape> - <icon width="35" height="35" topLeftX="80" topLeftY="357" iconType="iconpark/Industry/spanner.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(50, 50, 50, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="176" height="56" topLeftX="122" topLeftY="389" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(172, 175, 181, 1)"> - <p> - <span color="rgba(172, 175, 181, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="176" height="53" topLeftX="121" topLeftY="347" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(246, 246, 246, 1)" bold="true"> - <p> - <span color="rgba(246, 246, 246, 1)" fontSize="22">精益求精</span> - </p> - </content> - </shape> - <shape width="272" height="154" topLeftX="632" topLeftY="332" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </shape> - <shape width="176" height="56" topLeftX="699" topLeftY="389" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(172, 175, 181, 1)"> - <p> - <span color="rgba(172, 175, 181, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="176" height="53" topLeftX="698" topLeftY="347" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(246, 246, 246, 1)" bold="true"> - <p> - <span color="rgba(246, 246, 246, 1)" fontSize="22">社会关怀</span> - </p> - </content> - </shape> - <icon width="35" height="35" topLeftX="657" topLeftY="357" iconType="iconpark/Base/like.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </icon> - <shape width="869" height="69" topLeftX="45" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" textAlign="center"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial Black">企业价值观</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="JD1kbXuJzocwekxSLvKcOvp2nxc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.66" type="rect"> - <fill> - <fillColor color="linear-gradient(172deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 24%,rgba(255, 255, 255, 0.34) 54%,rgba(0, 0, 0, 0.51) 85%,rgba(17, 17, 17, 1) 100%)"/> - </fill> - </shape> - <shape width="409" height="38" topLeftX="199" topLeftY="243" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(116, 119, 122, 1)"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="400" height="77" topLeftX="196" topLeftY="177" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span fontSize="38">产品介绍</span> - </p> - </content> - </shape> - <shape width="122" height="94" topLeftX="84" topLeftY="165" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="74" color="rgba(255, 104, 68, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 104, 68, 1)" fontSize="74">03</span> - </strong> - </p> - </content> - </shape> - <line startX="86" startY="189" endX="55" endY="245"> - <border width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="1" height="402" topLeftX="930" topLeftY="84" flipX="true" alpha="0.5" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="56" height="30" topLeftX="889" topLeftY="497" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="30" height="85" topLeftX="930" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="248" height="41" topLeftX="73" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="Tgvqb7QwjojIMbxu7QIcy8mpnnf" width="26" height="26" topLeftX="51" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="116" height="116" topLeftX="844" topLeftY="0" rotation="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="255" height="92" topLeftX="45" topLeftY="206" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="255" height="68" topLeftX="45" topLeftY="139" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p> - <span fontSize="32">核心产品介绍</span> - </p> - </content> - </shape> - <shape width="187" height="47" topLeftX="326" topLeftY="394" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true"> - <p> - <strong> - <span fontSize="18">产品 A</span> - </strong> - </p> - </content> - </shape> - <shape width="187" height="56" topLeftX="326" topLeftY="428" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <img src="MOTZbhyLPon20UxwKe0caOFzn7g" width="178" height="328" topLeftX="335" topLeftY="54" exposure="-1" contrast="7" saturation="-100"> - <crop type="rect" leftOffset="138" rightOffset="138" topOffset="0" bottomOffset="0" presetHandlers="4"/> - </img> - <img src="AxeSbPOgBoL1MqxJYrtcf48znec" width="178" height="328" topLeftX="531" topLeftY="54" exposure="11" contrast="5" saturation="-100"> - <crop type="rect" leftOffset="173" rightOffset="102" topOffset="0" bottomOffset="0" presetHandlers="4"/> - </img> - <shape width="187" height="47" topLeftX="522" topLeftY="394" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true"> - <p> - <strong> - <span fontSize="18">产品 B</span> - </strong> - </p> - </content> - </shape> - <shape width="187" height="56" topLeftX="522" topLeftY="428" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <img src="ZDhbb914Xoq7Xzxor1Bc2y0DnOe" width="178" height="328" topLeftX="727" topLeftY="54" exposure="-1" contrast="15" saturation="-100"> - <crop type="rect" leftOffset="106" rightOffset="45" topOffset="0" bottomOffset="174" presetHandlers="4"/> - </img> - <shape width="187" height="47" topLeftX="718" topLeftY="394" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true"> - <p> - <strong> - <span fontSize="18">产品 C</span> - </strong> - </p> - </content> - </shape> - <shape width="187" height="56" topLeftX="718" topLeftY="428" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Arial Black" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12" fontFamily="Arial Black">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <img src="V9A6bjCLVoz4L5x2WKQcoeCJnKf" width="53" height="53" topLeftX="878" topLeftY="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="16" height="116" topLeftX="0" topLeftY="424" rotation="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="932" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(172, 175, 181, 1)"/> - </fill> - </shape> - <shape width="55" height="94" topLeftX="905" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="52" height="28" topLeftX="920" topLeftY="446" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="472" height="354" topLeftX="55" topLeftY="132" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="97" startY="439" endX="509" endY="440" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="97" startY="167" endX="509" endY="168" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="97" startY="221" endX="509" endY="222" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="98" startY="273" endX="510" endY="274" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="97" startY="330" endX="509" endY="331" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="98" startY="385" endX="510" endY="386" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="66" height="38" topLeftX="89" topLeftY="438" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2021</span> - </p> - </content> - </shape> - <shape width="48" height="38" topLeftX="49" topLeftY="150" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">100</span> - </p> - </content> - </shape> - <shape width="48" height="38" topLeftX="49" topLeftY="200" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">80</span> - </p> - </content> - </shape> - <shape width="48" height="38" topLeftX="49" topLeftY="256" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">60</span> - </p> - </content> - </shape> - <shape width="48" height="38" topLeftX="50" topLeftY="313" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">40</span> - </p> - </content> - </shape> - <shape width="48" height="38" topLeftX="49" topLeftY="368" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">20</span> - </p> - </content> - </shape> - <shape width="64" height="38" topLeftX="161" topLeftY="438" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2022</span> - </p> - </content> - </shape> - <shape width="65" height="38" topLeftX="233" topLeftY="438" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2023</span> - </p> - </content> - </shape> - <shape width="64" height="38" topLeftX="305" topLeftY="438" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2024</span> - </p> - </content> - </shape> - <shape width="66" height="38" topLeftX="376" topLeftY="438" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2025</span> - </p> - </content> - </shape> - <shape width="66" height="38" topLeftX="448" topLeftY="438" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026</span> - </p> - </content> - </shape> - <shape width="16" height="228" topLeftX="472" topLeftY="211" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="141" topLeftX="472" topLeftY="298" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="248" topLeftX="401" topLeftY="191" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="153" topLeftX="401" topLeftY="284" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="194" topLeftX="329" topLeftY="244" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="84" topLeftX="329" topLeftY="355" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="135" topLeftX="257" topLeftY="304" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="109" topLeftX="257" topLeftY="330" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="195" topLeftX="185" topLeftY="244" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="129" topLeftX="185" topLeftY="310" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="85" topLeftX="113" topLeftY="354" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="16" height="70" topLeftX="113" topLeftY="369" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="323" height="56" topLeftX="572" topLeftY="163" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="323" height="50" topLeftX="572" topLeftY="121" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p>前景一</p> - </content> - </shape> - <shape width="323" height="56" topLeftX="572" topLeftY="293" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="323" height="50" topLeftX="572" topLeftY="251" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p>前景二</p> - </content> - </shape> - <shape width="323" height="56" topLeftX="572" topLeftY="422" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="323" height="50" topLeftX="572" topLeftY="380" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p>前景三</p> - </content> - </shape> - <shape width="376" height="68" topLeftX="45" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p> - <span fontSize="32">市场前景</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="JgftbWuCcoHDfgxe15wcHxWQnih" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.3" type="rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="177" height="56" topLeftX="199" topLeftY="243" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(116, 119, 122, 1)"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="400" height="77" topLeftX="196" topLeftY="177" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(0, 0, 0, 1)" bold="true"> - <p>战略规划</p> - </content> - </shape> - <shape width="122" height="94" topLeftX="84" topLeftY="165" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="74" color="rgba(255, 104, 68, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 104, 68, 1)" fontSize="74">04</span> - </strong> - </p> - </content> - </shape> - <line startX="86" startY="189" endX="55" endY="245"> - <border width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="1" height="402" topLeftX="930" topLeftY="84" flipX="true" alpha="0.5" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="56" height="30" topLeftX="889" topLeftY="497" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="30" height="85" topLeftX="930" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(51, 51, 51, 1)"/> - </fill> - </shape> - <shape width="248" height="41" topLeftX="73" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="Tgvqb7QwjojIMbxu7QIcy8mpnnf" width="26" height="26" topLeftX="51" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="282" height="201" topLeftX="322" topLeftY="56" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="DQEVbHjTKodA9OxGSM7c1L4Vnvd" width="68" height="68" topLeftX="341" topLeftY="75" exposure="28" contrast="43" saturation="-100"> - <crop type="rect" leftOffset="13" rightOffset="23" topOffset="34" bottomOffset="0.83" presetHandlers="4"/> - </img> - <shape width="255" height="56" topLeftX="333" topLeftY="189" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="256" height="53" topLeftX="333" topLeftY="146" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">项目一</span> - </p> - </content> - </shape> - <shape width="282" height="201" topLeftX="623" topLeftY="278" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="NX6cbPBttocUDrxQo5Gc5t25nIe" width="68" height="68" topLeftX="642" topLeftY="297" exposure="28" contrast="43" saturation="-100"> - <crop type="rect" leftOffset="48" rightOffset="0.75" topOffset="49" bottomOffset="0" presetHandlers="4"/> - </img> - <shape width="255" height="56" topLeftX="634" topLeftY="411" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="256" height="53" topLeftX="634" topLeftY="368" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">项目四</span> - </p> - </content> - </shape> - <shape width="282" height="201" topLeftX="322" topLeftY="278" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(50, 50, 50, 1)"/> - </fill> - </shape> - <shape width="255" height="56" topLeftX="333" topLeftY="411" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(172, 175, 181, 1)"> - <p> - <span color="rgba(172, 175, 181, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="256" height="53" topLeftX="333" topLeftY="368" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(246, 246, 246, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(246, 246, 246, 1)">项目三</span> - </p> - </content> - </shape> - <img src="GbuebbRm4o5oPDxDA9ScCT7innc" width="68" height="68" topLeftX="341" topLeftY="297" exposure="-1" contrast="15" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="11" bottomOffset="11" presetHandlers="4"/> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="282" height="201" topLeftX="623" topLeftY="56" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="255" height="56" topLeftX="634" topLeftY="189" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(239, 219, 211, 1)"> - <p> - <span color="rgba(239, 219, 211, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="256" height="53" topLeftX="634" topLeftY="146" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(246, 246, 246, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(246, 246, 246, 1)">项目二</span> - </p> - </content> - </shape> - <img src="VyEQbKSykol0lix7IgFc3mwNn4e" width="68" height="68" topLeftX="642" topLeftY="75" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="11" bottomOffset="11" presetHandlers="4"/> - <border color="rgba(219, 221, 225, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="255" height="92" topLeftX="45" topLeftY="245" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="255" height="68" topLeftX="45" topLeftY="178" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p> - <span fontSize="32">重点项目</span> - </p> - </content> - </shape> - <shape width="30" height="28" topLeftX="0" topLeftY="512" rotation="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="43" height="482" topLeftX="862" topLeftY="58" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <img src="InrKbmSgIongY7xDWWoc6B04nZe" width="424" height="540" topLeftX="439" topLeftY="0" exposure="24" contrast="-15" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="1" bottomOffset="1" presetHandlers="0"/> - </img> - <img src="CzqsbJfHboX3TJxKUOJcMK5Inxh" width="53" height="53" topLeftX="878" topLeftY="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="16" height="80" topLeftX="0" topLeftY="460" rotation="0" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - <shape width="376" height="68" topLeftX="45" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p> - <span fontSize="32">展望未来</span> - </p> - </content> - </shape> - <shape width="352" height="74" topLeftX="45" topLeftY="190" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="352" height="50" topLeftX="45" topLeftY="148" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p>发展方向一</p> - </content> - </shape> - <shape width="352" height="74" topLeftX="45" topLeftY="337" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 149, 152, 1)"> - <p> - <span color="rgba(147, 149, 152, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="352" height="50" topLeftX="45" topLeftY="295" rotation="0" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">发展方向二</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(246, 246, 246, 1)"/> - </fill> - </style> - <data> - <shape width="248" height="41" topLeftX="73" topLeftY="48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Logo</span> - </strong> - </p> - </content> - </shape> - <img src="QX1Lb2owNoIphsxBImZccHudnid" width="26" height="26" topLeftX="51" topLeftY="55" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="490" height="104" topLeftX="235" topLeftY="196" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="56" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="56">谢谢观看</span> - </strong> - </p> - </content> - </shape> - <shape width="355" height="50" topLeftX="307" topLeftY="290" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(116, 119, 122, 1)" bold="false" textAlign="center"> - <p> - <span color="rgba(116, 119, 122, 1)" fontSize="20" bold="false">期待您的加入!</span> - </p> - </content> - </shape> - <shape width="22" height="17" topLeftX="370" topLeftY="306" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="22" height="17" topLeftX="567" topLeftY="306" type="rect"> - <fill> - <fillColor color="rgba(255, 104, 68, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/hr--employee_training.xml b/skills/lark-slides/assets/templates/hr--employee_training.xml deleted file mode 100644 index f57b89083..000000000 --- a/skills/lark-slides/assets/templates/hr--employee_training.xml +++ /dev/null @@ -1,912 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>员工培训 - - - - - - - <headline fontColor="#000000FF" fontSize="36"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="AiubbdDtOosfbEx6K6Oc9jJPnhb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="300" height="74" topLeftX="51" topLeftY="351" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">主讲人:李天天 </span> - </p> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">资深研究员,创业公司CEO</span> - </p> - </content> - </shape> - <shape width="547" height="176" topLeftX="46" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="65" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="65">员工</span> - </strong> - </p> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="65">培训指南</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" autoFit="shape-auto-fit"> - <p>输入你的互联网公司</p> - </content> - </shape> - <shape width="16" height="15" topLeftX="78" topLeftY="60" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="36" height="16" topLeftX="48" topLeftY="50" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="15" topLeftX="78" topLeftY="39" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="202" height="41" topLeftX="712" topLeftY="28" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right" autoFit="shape-auto-fit"> - <p list="none" textAlign="right">公司名字</p> - </content> - </shape> - <shape width="202" height="39" topLeftX="58" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p>输入互联网公司</p> - </content> - </shape> - <shape width="202" height="38" topLeftX="702" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right"> - <p>2026年第一季度</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <line startX="60" startY="152" endX="540" endY="152" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="531" height="104" topLeftX="47" topLeftY="38" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="60">目录</span> - </strong> - </p> - </content> - </shape> - <shape width="310" height="260" topLeftX="60" topLeftY="203" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:2.3"> - <ul listStyle="circle-hollow-square"> - <li> - <p lineSpacing="multiple:3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">培训目的</span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">合同签订的注意事项</span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">劳动争议风险</span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">知识产权及商业机密风险</span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">商业道德方面</span> - </strong> - </p> - </li> - </ul> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NXFgbhXpSoDgJGxhkF4c8vC4n6e" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="linear-gradient(90deg,rgba(4, 58, 138, 1) 0%,rgba(104, 158, 239, 1) 16%,rgba(152, 222, 251, 1) 36%,rgba(255, 157, 11, 1) 66%,rgba(255, 92, 0, 1) 84%,rgba(62, 15, 197, 1) 100%)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="347" height="83" topLeftX="34" topLeftY="94" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</span> - </p> - </content> - </shape> - <shape width="895" height="64" topLeftX="34" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">培训目的</span> - </strong> - </p> - </content> - </shape> - <shape width="422" height="224" topLeftX="512" topLeftY="190" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="200" fontFamily="黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>01</p> - </content> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="484" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="24" height="10" topLeftX="45" topLeftY="476" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="470" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="202" height="38" topLeftX="702" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right"> - <p>2026年第一季度</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <shape width="413" height="326" topLeftX="492" topLeftY="150" presetHandlers="8" flipX="true" alpha="0.2" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="413" height="326" topLeftX="59" topLeftY="150" presetHandlers="8" alpha="0.2" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="59" startY="101" endX="905" endY="101" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <img src="JOdrbcqdUoQvVwxO3bpcScHynPJ" width="382" height="191" topLeftX="508" topLeftY="164"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="PIvhbkqeaoY3O8xp9CEco4ZZnvg" width="382" height="191" topLeftX="75" topLeftY="164"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="468" height="53" topLeftX="53" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>培训目的</p> - </content> - </shape> - <shape width="382" height="56" topLeftX="507" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="382" height="56" topLeftX="75" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="382" height="44" topLeftX="508" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>提高自我防护意识和能力</p> - </content> - </shape> - <shape width="382" height="44" topLeftX="75" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>增强公司员工法律意识以及法律观念</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NXFgbhXpSoDgJGxhkF4c8vC4n6e" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="linear-gradient(90deg,rgba(4, 58, 138, 1) 0%,rgba(104, 158, 239, 1) 16%,rgba(152, 222, 251, 1) 36%,rgba(255, 157, 11, 1) 66%,rgba(255, 92, 0, 1) 84%,rgba(62, 15, 197, 1) 100%)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="347" height="83" topLeftX="34" topLeftY="94" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</span> - </p> - </content> - </shape> - <shape width="895" height="64" topLeftX="34" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">合同签订的注意事项</span> - </strong> - </p> - </content> - </shape> - <shape width="422" height="224" topLeftX="512" topLeftY="190" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="200" fontFamily="黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>02</p> - </content> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="484" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="24" height="10" topLeftX="45" topLeftY="476" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="470" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="202" height="38" topLeftX="702" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right"> - <p>2026年第一季度</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <line startX="59" startY="101" endX="905" endY="101" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="63" height="68" topLeftX="59" topLeftY="180" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32" fontFamily="Arial Black">01</span> - </strong> - </p> - </content> - </shape> - <shape width="63" height="68" topLeftX="60" topLeftY="342" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32" fontFamily="Arial Black">02</span> - </strong> - </p> - </content> - </shape> - <shape width="468" height="53" topLeftX="53" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>合同签订的注意事项</p> - </content> - </shape> - <img src="A0G0btjSBoQYwwxHio7cjyTnnhh" width="344" height="300" topLeftX="561" topLeftY="164"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="22" bottomOffset="22" presetHandlers="12"/> - </img> - <shape width="341" height="74" topLeftX="59" topLeftY="396" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="341" height="74" topLeftX="59" topLeftY="234" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="411" height="44" topLeftX="115" topLeftY="358" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>签订合同过程中应注意的问题</p> - </content> - </shape> - <shape width="411" height="44" topLeftX="110" topLeftY="195" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>合同签订前的调查工作</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NXFgbhXpSoDgJGxhkF4c8vC4n6e" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="linear-gradient(90deg,rgba(4, 58, 138, 1) 0%,rgba(104, 158, 239, 1) 16%,rgba(152, 222, 251, 1) 36%,rgba(255, 157, 11, 1) 66%,rgba(255, 92, 0, 1) 84%,rgba(62, 15, 197, 1) 100%)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="347" height="83" topLeftX="34" topLeftY="94" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</span> - </p> - </content> - </shape> - <shape width="895" height="64" topLeftX="34" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">劳动争议风险</span> - </strong> - </p> - </content> - </shape> - <shape width="422" height="224" topLeftX="512" topLeftY="190" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="200" fontFamily="黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>03</p> - </content> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="484" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="24" height="10" topLeftX="45" topLeftY="476" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="470" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="202" height="38" topLeftX="702" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right"> - <p>2026年第一季度</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <shape width="395" height="395" topLeftX="99" topLeftY="116" type="ellipse"> - <border color="linear-gradient(140deg,rgba(0, 20, 51, 1) 0%,rgba(48, 171, 240, 1) 26%,rgba(255, 107, 0, 1) 62%,rgba(0, 16, 102, 1) 100%)" width="6" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="369" height="369" topLeftX="113" topLeftY="129" type="ellipse"> - <border color="linear-gradient(140deg,rgba(0, 20, 51, 1) 0%,rgba(48, 171, 240, 1) 26%,rgba(255, 107, 0, 1) 62%,rgba(0, 16, 102, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="340" height="340" topLeftX="127" topLeftY="144" type="ellipse"> - <border color="linear-gradient(140deg,rgba(0, 20, 51, 1) 0%,rgba(48, 171, 240, 1) 26%,rgba(255, 107, 0, 1) 62%,rgba(0, 16, 102, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="395" height="395" topLeftX="465" topLeftY="116" type="ellipse"> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - <border color="linear-gradient(90deg,rgba(4, 58, 138, 1) 0%,rgba(104, 158, 239, 1) 16%,rgba(152, 222, 251, 1) 36%,rgba(255, 157, 11, 1) 66%,rgba(255, 92, 0, 1) 84%,rgba(62, 15, 197, 1) 100%)" width="6" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="468" height="53" topLeftX="53" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>劳动争议风险</p> - </content> - </shape> - <shape width="236" height="74" topLeftX="545" topLeftY="306" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(212, 212, 212, 1)" bold="false" textAlign="center"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="236" height="74" topLeftX="179" topLeftY="305" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="395" height="49" topLeftX="465" topLeftY="250" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="21" color="rgba(212, 212, 212, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>合同内容与工资</p> - </content> - </shape> - <shape width="395" height="49" topLeftX="99" topLeftY="250" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="21" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>劳动合约签约的时间</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <line startX="59" startY="101" endX="905" endY="101" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="258" height="287" topLeftX="645" topLeftY="165" presetHandlers="8" alpha="0.2" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="258" height="287" topLeftX="351" topLeftY="165" presetHandlers="8" alpha="0.2" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="258" height="287" topLeftX="57" topLeftY="165" presetHandlers="8" alpha="0.2" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Qd97bGCM1oeyAQxRUmvcPUJjnyb" width="231" height="116" topLeftX="658" topLeftY="181"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.02" bottomOffset="0.02" presetHandlers="8"/> - </img> - <img src="Z5ldbgltxoBN0XxyNxVcV2tWnWb" width="231" height="116" topLeftX="364" topLeftY="181"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.02" bottomOffset="0.02" presetHandlers="8"/> - </img> - <img src="YXs0befYaoW0X5xtARpcuGT0nCb" width="231" height="116" topLeftX="71" topLeftY="181"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.02" bottomOffset="0.02" presetHandlers="8"/> - </img> - <shape width="231" height="92" topLeftX="658" topLeftY="355" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="231" height="92" topLeftX="364" topLeftY="355" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="231" height="92" topLeftX="71" topLeftY="355" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="258" height="44" topLeftX="645" topLeftY="313" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>解除劳动合同</p> - </content> - </shape> - <shape width="258" height="44" topLeftX="351" topLeftY="313" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>工伤</p> - </content> - </shape> - <shape width="258" height="44" topLeftX="57" topLeftY="313" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>合同约定内容</p> - </content> - </shape> - <shape width="468" height="53" topLeftX="53" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>劳动争议风险</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NXFgbhXpSoDgJGxhkF4c8vC4n6e" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="linear-gradient(90deg,rgba(4, 58, 138, 1) 0%,rgba(104, 158, 239, 1) 16%,rgba(152, 222, 251, 1) 36%,rgba(255, 157, 11, 1) 66%,rgba(255, 92, 0, 1) 84%,rgba(62, 15, 197, 1) 100%)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="347" height="83" topLeftX="34" topLeftY="94" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</span> - </p> - </content> - </shape> - <shape width="895" height="64" topLeftX="34" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">知识产权及商业机密风险</span> - </strong> - </p> - </content> - </shape> - <shape width="422" height="224" topLeftX="512" topLeftY="190" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="200" fontFamily="黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>04</p> - </content> - </shape> - <shape width="202" height="38" topLeftX="702" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right" autoFit="shape-auto-fit"> - <p>2026年第一季度</p> - </content> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="484" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="24" height="10" topLeftX="45" topLeftY="476" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="470" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <line startX="59" startY="101" endX="905" endY="101" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="278" height="278" topLeftX="627" topLeftY="202" presetHandlers="8" alpha="0.5" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="649" startY="303" endX="883" endY="304" alpha="0.25"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="62" height="62" topLeftX="644" topLeftY="221" iconType="iconpark/Safe/protect.svg"> - <border color="linear-gradient(140deg,rgba(0, 20, 51, 1) 0%,rgba(48, 171, 240, 1) 26%,rgba(255, 107, 0, 1) 62%,rgba(0, 16, 102, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="278" height="278" topLeftX="59" topLeftY="202" presetHandlers="8" alpha="0.5" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="81" startY="303" endX="315" endY="304" alpha="0.25"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="62" height="62" topLeftX="76" topLeftY="221" iconType="iconpark/Clothes/bachelor-cap-one.svg"> - <border color="linear-gradient(140deg,rgba(0, 20, 51, 1) 0%,rgba(48, 171, 240, 1) 26%,rgba(255, 107, 0, 1) 62%,rgba(0, 16, 102, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="278" height="278" topLeftX="343" topLeftY="202" presetHandlers="8" alpha="0.5" type="round-rect"> - <border color="rgba(170, 170, 170, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="365" startY="303" endX="599" endY="304" alpha="0.25"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="62" height="62" topLeftX="360" topLeftY="221" iconType="iconpark/Edit/bring-to-front-one.svg"> - <border color="linear-gradient(140deg,rgba(0, 20, 51, 1) 0%,rgba(48, 171, 240, 1) 26%,rgba(255, 107, 0, 1) 62%,rgba(0, 16, 102, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="230" height="38" topLeftX="713" topLeftY="222" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p>Topic 03</p> - </content> - </shape> - <shape width="230" height="38" topLeftX="145" topLeftY="222" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p>Topic 01</p> - </content> - </shape> - <shape width="468" height="53" topLeftX="53" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>知识产权及商业机密风险</p> - </content> - </shape> - <shape width="230" height="38" topLeftX="429" topLeftY="221" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p>Topic 02</p> - </content> - </shape> - <shape width="228" height="44" topLeftX="145" topLeftY="245" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>什么是知识产权?</p> - </content> - </shape> - <shape width="237" height="92" topLeftX="649" topLeftY="324" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="237" height="92" topLeftX="361" topLeftY="324" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="237" height="92" topLeftX="78" topLeftY="324" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="228" height="44" topLeftX="713" topLeftY="245" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>风险防范</p> - </content> - </shape> - <shape width="228" height="44" topLeftX="429" topLeftY="245" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>专利的定义</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NXFgbhXpSoDgJGxhkF4c8vC4n6e" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="linear-gradient(90deg,rgba(4, 58, 138, 1) 0%,rgba(104, 158, 239, 1) 16%,rgba(152, 222, 251, 1) 36%,rgba(255, 157, 11, 1) 66%,rgba(255, 92, 0, 1) 84%,rgba(62, 15, 197, 1) 100%)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="347" height="83" topLeftX="34" topLeftY="94" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</span> - </p> - </content> - </shape> - <shape width="895" height="64" topLeftX="34" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">商业道德方面</span> - </strong> - </p> - </content> - </shape> - <shape width="422" height="224" topLeftX="512" topLeftY="190" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="200" fontFamily="黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>05</p> - </content> - </shape> - <shape width="202" height="38" topLeftX="702" topLeftY="462" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right" autoFit="shape-auto-fit"> - <p>2026年第一季度</p> - </content> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="484" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="24" height="10" topLeftX="45" topLeftY="476" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="65" topLeftY="470" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(13, 20, 32, 1)"/> - </fill> - </style> - <data> - <line startX="59" startY="101" endX="905" endY="101" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="64" startY="188" endX="185" endY="188"> - <border color="linear-gradient(90deg,rgba(16, 0, 81, 1) 0%,rgba(62, 0, 239, 1) 100%)" width="6" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="242" startY="188" endX="363" endY="188"> - <border color="linear-gradient(90deg,rgba(62, 0, 239, 1) 0%,rgba(48, 206, 196, 1) 100%)" width="6" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="414" startY="188" endX="535" endY="188"> - <border color="linear-gradient(90deg,rgba(48, 206, 196, 1) 0%,rgba(255, 122, 0, 1) 100%)" width="6" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="591" startY="188" endX="712" endY="188"> - <border color="linear-gradient(90deg,rgba(255, 122, 0, 1) 0%,rgba(152, 16, 174, 1) 100%)" width="6" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="770" startY="188" endX="891" endY="188"> - <border color="linear-gradient(90deg,rgba(152, 16, 174, 1) 0%,rgba(5, 0, 36, 1) 100%)" width="6" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="230" height="41" topLeftX="685" topLeftY="64" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>公司名字</p> - </content> - </shape> - <shape width="468" height="53" topLeftX="53" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>商业道德标准</p> - </content> - </shape> - <shape width="132" height="200" topLeftX="765" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="132" height="200" topLeftX="586" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="132" height="200" topLeftX="409" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="132" height="200" topLeftX="237" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="132" height="200" topLeftX="59" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字请在此处编辑文字</p> - </content> - </shape> - <shape width="131" height="53" topLeftX="765" topLeftY="192" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>05</p> - </content> - </shape> - <shape width="131" height="53" topLeftX="586" topLeftY="192" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>04</p> - </content> - </shape> - <shape width="131" height="53" topLeftX="409" topLeftY="192" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>03</p> - </content> - </shape> - <shape width="131" height="53" topLeftX="237" topLeftY="192" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>02</p> - </content> - </shape> - <shape width="131" height="53" topLeftX="59" topLeftY="192" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="YBLRbyEjxo8hiIxsQaFcYLSmnQc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="51" startY="457" endX="904" endY="456"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="230" height="41" topLeftX="684" topLeftY="28" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>公司名字</p> - </content> - </shape> - <shape width="678" height="116" topLeftX="236" topLeftY="302" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="80">谢谢观看</span> - </strong> - </p> - </content> - </shape> - <shape width="16" height="15" topLeftX="78" topLeftY="60" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="36" height="16" topLeftX="48" topLeftY="50" rotation="90" flipX="true" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="15" topLeftX="78" topLeftY="39" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="185" height="38" topLeftX="51" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p list="none" textAlign="left"> - <span color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">A座32楼会议室</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="722" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right" autoFit="shape-auto-fit"> - <p list="none" textAlign="right"> - <span color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">2026年第一季度</span> - </p> - </content> - </shape> - <shape width="202" height="42" topLeftX="712" topLeftY="28" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="right" autoFit="shape-auto-fit"> - <p list="none" textAlign="right">公司名字</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/hr--employee_training_workshop.xml b/skills/lark-slides/assets/templates/hr--employee_training_workshop.xml deleted file mode 100644 index 071add737..000000000 --- a/skills/lark-slides/assets/templates/hr--employee_training_workshop.xml +++ /dev/null @@ -1,1504 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>员工培训训练 - - - - <headline fontColor="#000000FF" fontFamily="Sans Serif"/> - <sub-headline fontColor="#000000FF" fontFamily="Sans Serif"/> - <body fontColor="#000000FF" fontFamily="Sans Serif"/> - <caption fontColor="#808080FF" fontFamily="Sans Serif" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="100" height="100" topLeftX="20" topLeftY="256" rotation="54" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="219" height="100" topLeftX="-61" topLeftY="183" rotation="144" alpha="0.8" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="302" height="100" topLeftX="621" topLeftY="468" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(83, 181, 169, 1)"/> - </fill> - </shape> - <shape width="213" height="100" topLeftX="54" topLeftY="494" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="302" height="100" topLeftX="378" topLeftY="253" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(181, 218, 213, 1)"/> - </fill> - </shape> - <shape width="182" height="100" topLeftX="343" topLeftY="478" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="822" topLeftY="358" rotation="54" alpha="0.95" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="925" topLeftY="42" rotation="54" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="281" height="100" topLeftX="345" topLeftY="7" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="435" topLeftY="98" rotation="54" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="20" topLeftY="256" rotation="54" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="219" height="100" topLeftX="-61" topLeftY="183" rotation="144" alpha="0.8" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="302" height="100" topLeftX="621" topLeftY="468" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(83, 181, 169, 1)"/> - </fill> - </shape> - <shape width="213" height="100" topLeftX="54" topLeftY="494" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="302" height="100" topLeftX="378" topLeftY="253" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(181, 218, 213, 1)"/> - </fill> - </shape> - <shape width="182" height="100" topLeftX="343" topLeftY="478" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="822" topLeftY="358" rotation="54" alpha="0.95" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="925" topLeftY="42" rotation="54" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="281" height="100" topLeftX="345" topLeftY="7" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="100" height="100" topLeftX="435" topLeftY="98" rotation="54" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="394" height="116" topLeftX="480" topLeftY="54" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="Sans Serif" bold="true"> - <p> - <strong> - <span fontSize="64" fontFamily="Sans Serif">员工培训</span> - </strong> - </p> - </content> - </shape> - <shape width="338" height="116" topLeftX="593" topLeftY="142" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="Sans Serif" bold="true"> - <p> - <strong> - <span fontSize="64" fontFamily="Sans Serif">训练模版</span> - </strong> - </p> - </content> - </shape> - <shape width="338" height="80" topLeftX="66" topLeftY="409" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" bold="true" letterSpacing="1"> - <p letterSpacing="1"> - <strong> - <span fontSize="40" fontFamily="Sans Serif">李天天</span> - </strong> - </p> - </content> - </shape> - <shape width="338" height="47" topLeftX="67" topLeftY="388" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Sans Serif" bold="true" letterSpacing="1"> - <p letterSpacing="1"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">演讲人</span> - </strong> - </p> - </content> - </shape> - <shape width="46" height="38" topLeftX="0" topLeftY="461" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="12" fontFamily="Sans Serif">01</span> - </strong> - </p> - </content> - </shape> - <shape width="46" height="38" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>01</p> - </content> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="259" height="38" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p list="none" textAlign="left"> - <strong> - <span color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="Sans Serif" italic="false" strikethrough="false" underline="false">公司名称</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="300" height="300" topLeftX="-150" topLeftY="240" rotation="54" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="-36" topLeftY="151" rotation="54" alpha="0.45" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="347" topLeftY="-141" rotation="54" alpha="0.75" type="ellipse"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="661" height="286" topLeftX="554" topLeftY="206" rotation="144" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(157, 197, 192, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="90" topLeftX="536" topLeftY="54" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="46" fontFamily="Sans Serif" bold="true"> - <p> - <strong> - <span fontSize="46" fontFamily="Sans Serif">目录页</span> - </strong> - </p> - </content> - </shape> - <shape width="337" height="48" topLeftX="539" topLeftY="131" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Sans Serif" bold="false"> - <p> - <span fontSize="18" fontFamily="Sans Serif" bold="false">我们将在本培训课程中讨论什么</span> - </p> - </content> - </shape> - <shape width="337" height="335" topLeftX="76" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Sans Serif" bold="true" lineSpacing="multiple:2.5" list="number"> - <ol> - <li index="1"> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">简介 </span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">我们的培训目标 </span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">培训收益 </span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">涵盖的主题 </span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">关键学习总结 </span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">检查理解程度 </span> - </strong> - </p> - </li> - <li> - <p lineSpacing="multiple:2.5"> - <strong> - <span fontSize="18" fontFamily="Sans Serif">讨论板</span> - </strong> - </p> - </li> - </ol> - </content> - </shape> - <shape width="337" height="38" topLeftX="66" topLeftY="461" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>公司名称</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="14" fontFamily="Sans Serif">简介</span> - </strong> - </p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="right"> - <p>1</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>03</p> - </content> - </shape> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="300" height="300" topLeftX="315" topLeftY="390" rotation="54" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="462" topLeftY="457" rotation="54" alpha="0.24" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="304" topLeftY="-194" rotation="54" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="420" height="286" topLeftX="769" topLeftY="158" rotation="144" alpha="0.32" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(102, 130, 194, 1)"/> - </fill> - </shape> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 60, 60, 1)" fontSize="14" fontFamily="Sans Serif">简介</span> - </strong> - </p> - </content> - </shape> - <shape width="337" height="54" topLeftX="66" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 60, 60, 1)" fontSize="22" fontFamily="Sans Serif">大家好!</span> - </strong> - </p> - </content> - </shape> - <shape width="234" height="91" topLeftX="110" topLeftY="117" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="bullet"> - <ul> - <li> - <p lineSpacing="multiple:1.7">介绍一下将主持培训的演讲者。</p> - </li> - <li> - <p lineSpacing="multiple:1.7">写另一条关于演讲者的信息。</p> - </li> - <li> - <p lineSpacing="multiple:1.7">再写一条关于演讲者的信息。</p> - </li> - </ul> - </content> - </shape> - <img src="VxM1b9rn2o4sfXxvHu5coHVWnPg" width="312" height="312" topLeftX="517" topLeftY="110"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="156"/> - </img> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>05</p> - </content> - </shape> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true"> - <p>我们的培训目标</p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="right"> - <p>2</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="300" height="300" topLeftX="315" topLeftY="390" rotation="54" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="462" topLeftY="457" rotation="54" alpha="0.24" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="304" topLeftY="-194" rotation="54" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="420" height="286" topLeftX="769" topLeftY="158" rotation="144" alpha="0.32" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(102, 130, 194, 1)"/> - </fill> - </shape> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 60, 60, 1)" fontSize="14" fontFamily="Sans Serif">我们的培训目标</span> - </strong> - </p> - </content> - </shape> - <shape width="293" height="92" topLeftX="66" topLeftY="79" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">在此介绍该培训课程旨在向观众传授的主要概念。分享它将如何帮助他们在公司内部履行职责。</p> - </content> - </shape> - <shape width="176" height="218" topLeftX="392" topLeftY="205" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="130" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(60, 60, 60, 1)" fontSize="130">1</span> - </p> - </content> - </shape> - <shape width="70" height="12" topLeftX="486" topLeftY="392" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="176" height="218" topLeftX="525" topLeftY="112" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="130" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(60, 60, 60, 1)" fontSize="130">2</span> - </p> - </content> - </shape> - <shape width="70" height="12" topLeftX="619" topLeftY="298" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="176" height="218" topLeftX="658" topLeftY="21" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="130" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(60, 60, 60, 1)" fontSize="130">3</span> - </p> - </content> - </shape> - <shape width="70" height="12" topLeftX="752" topLeftY="208" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="234" height="37" topLeftX="476" topLeftY="423" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="true" lineSpacing="multiple:1.2" list="none"> - <p list="none" lineSpacing="multiple:1.2"> - <strong> - <span fontSize="14" fontFamily="Sans Serif">此处输入副标题</span> - </strong> - </p> - </content> - </shape> - <shape width="234" height="37" topLeftX="608" topLeftY="331" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="true" lineSpacing="multiple:1.2" list="none"> - <p list="none" lineSpacing="multiple:1.2">此处输入副标题</p> - </content> - </shape> - <shape width="234" height="37" topLeftX="743" topLeftY="238" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="true" lineSpacing="multiple:1.2" list="none"> - <p list="none" lineSpacing="multiple:1.2">此处输入副标题</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>06</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="false"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>07</p> - </content> - </shape> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true"> - <p>培训收益</p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="right"> - <p>3</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 60, 60, 1)" fontSize="14" fontFamily="Sans Serif">培训收益</span> - </strong> - </p> - </content> - </shape> - <shape width="293" height="68" topLeftX="66" topLeftY="79" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">写出培训对观众或整个公司的好处或重要影响。</p> - </content> - </shape> - <img src="JoTFbGXn4onvpuxaCHtcXfsMnVd" width="505" height="331" topLeftX="385" topLeftY="35"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="505" height="75" topLeftX="385" topLeftY="392" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" bold="false" italic="true" lineSpacing="multiple:1.7" list="none" textAlign="right"> - <p list="none" lineSpacing="multiple:1.7"> - “日复一日,看似一切未变,但当你回首往事,一切却早已不同。” - <em> - <span fontSize="16" fontFamily="Sans Serif" bold="false"> </span> - </em> - </p> - <p list="none" lineSpacing="multiple:1.7"> - <strong> - <span fontSize="16" fontFamily="Sans Serif" italic="false">— 凯斯宾 · 普林斯</span> - </strong> - </p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>08</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>09</p> - </content> - </shape> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true"> - <p>涵盖的主题</p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="right"> - <p>4</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="300" height="300" topLeftX="315" topLeftY="390" rotation="54" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="462" topLeftY="457" rotation="54" alpha="0.24" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="304" topLeftY="-194" rotation="54" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="420" height="286" topLeftX="769" topLeftY="158" rotation="144" alpha="0.32" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(102, 130, 194, 1)"/> - </fill> - </shape> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>涵盖的主题</p> - </content> - </shape> - <shape width="293" height="68" topLeftX="66" topLeftY="79" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">讨论并探索这些主题,并使用简洁的语句总结每个主题。</p> - </content> - </shape> - <shape width="64" height="64" topLeftX="474" topLeftY="108" type="ellipse"> - <fill> - <fillColor color="rgba(102, 130, 194, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="29" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="29">I</span> - </strong> - </p> - </content> - </shape> - <shape width="337" height="45" topLeftX="548" topLeftY="95" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>主题方向一</p> - </content> - </shape> - <shape width="337" height="57" topLeftX="548" topLeftY="126" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="64" height="64" topLeftX="474" topLeftY="209" type="ellipse"> - <fill> - <fillColor color="rgba(209, 198, 99, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="29" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="29">II</span> - </strong> - </p> - </content> - </shape> - <shape width="337" height="45" topLeftX="548" topLeftY="196" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>主题方向二</p> - </content> - </shape> - <shape width="337" height="57" topLeftX="548" topLeftY="227" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="64" height="64" topLeftX="474" topLeftY="311" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="29" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="29">III</span> - </strong> - </p> - </content> - </shape> - <shape width="337" height="45" topLeftX="548" topLeftY="298" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>主题方向三</p> - </content> - </shape> - <shape width="337" height="57" topLeftX="548" topLeftY="329" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>10</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <img src="IYpObKWVQoriOsxvA24ccciwn9b" width="575" height="540" topLeftX="385" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="18" bottomOffset="18"/> - </img> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="293" height="44" topLeftX="66" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7"> - <span fontSize="14" fontFamily="Sans Serif" bold="false">用此区域来讨论主题方向一。</span> - </p> - </content> - </shape> - <shape width="64" height="64" topLeftX="75" topLeftY="82" type="ellipse"> - <fill> - <fillColor color="rgba(102, 130, 194, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="29" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="29">I</span> - </strong> - </p> - </content> - </shape> - <shape width="207" height="45" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>涵盖的主题</p> - </content> - </shape> - <shape width="245" height="75" topLeftX="139" topLeftY="77" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>11</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <img src="DECYbWFvloCiCQxu8f2cxa96nKg" width="575" height="540" topLeftX="385" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="18" bottomOffset="18"/> - </img> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="293" height="44" topLeftX="66" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">用此区域来讨论主题方向二。</p> - </content> - </shape> - <shape width="64" height="64" topLeftX="75" topLeftY="82" type="ellipse"> - <fill> - <fillColor color="rgba(209, 198, 99, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="29" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="29">II</span> - </strong> - </p> - </content> - </shape> - <shape width="207" height="45" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>涵盖的主题</p> - </content> - </shape> - <shape width="245" height="75" topLeftX="139" topLeftY="77" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>12</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <img src="X8Svb1SHPoNmoBxxspBch0dDnIf" width="575" height="540" topLeftX="385" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="18" bottomOffset="18"/> - </img> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="293" height="44" topLeftX="66" topLeftY="160" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">用此区域来讨论主题方向三。</p> - </content> - </shape> - <shape width="64" height="64" topLeftX="75" topLeftY="82" type="ellipse"> - <fill> - <fillColor color="rgba(234, 165, 143, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="29" color="rgba(247, 245, 240, 1)" bold="true"> - <p> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="29">III</span> - </strong> - </p> - </content> - </shape> - <shape width="207" height="45" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>涵盖的主题</p> - </content> - </shape> - <shape width="245" height="75" topLeftX="139" topLeftY="77" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>13</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>14</p> - </content> - </shape> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true"> - <p>关键学习总结</p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="right"> - <p>5</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="575" height="270" topLeftX="385" topLeftY="270" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p> - <span fontSize="14">关键学习总结</span> - </p> - </content> - </shape> - <shape width="293" height="44" topLeftX="66" topLeftY="79" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">在此处写出您的学习课程的摘要。</p> - </content> - </shape> - <shape width="248" height="47" topLeftX="92" topLeftY="147" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" bold="true" lineSpacing="multiple:1.7" list="bullet"> - <ul> - <li> - <p lineSpacing="multiple:1.7"> - 关键要点 - <strong> - <span fontSize="16"> 1</span> - </strong> - </p> - </li> - </ul> - </content> - </shape> - <shape width="575" height="165" topLeftX="385" topLeftY="46" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="84" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" lineSpacing="multiple:1.7" letterSpacing="8" list="none" textAlign="center"> - <p list="none" lineSpacing="multiple:1.7" letterSpacing="8"> - 要点 - <strong> - <span color="rgba(60, 60, 60, 1)" fontSize="84"> 1</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="12" topLeftX="747" topLeftY="179" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="575" height="165" topLeftX="385" topLeftY="311" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="84" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" lineSpacing="multiple:1.7" letterSpacing="8" list="none" textAlign="center"> - <p list="none" lineSpacing="multiple:1.7" letterSpacing="8"> - <strong> - <span color="rgba(247, 245, 240, 1)" fontSize="84">要点 2</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="12" topLeftX="747" topLeftY="444" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="248" height="83" topLeftX="110" topLeftY="179" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="248" height="47" topLeftX="92" topLeftY="268" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="Sans Serif" bold="true" lineSpacing="multiple:1.7" list="bullet"> - <ul> - <li> - <p lineSpacing="multiple:1.7"> - 关键要点 - <strong> - <span fontSize="16"> 2</span> - </strong> - </p> - </li> - </ul> - </content> - </shape> - <shape width="248" height="83" topLeftX="110" topLeftY="299" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>15</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </style> - <data> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>16</p> - </content> - </shape> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true"> - <p>检查理解程度</p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="right"> - <p>6</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="385" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="288" height="270" topLeftX="672" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(181, 218, 213, 1)"/> - </fill> - </shape> - <shape width="288" height="270" topLeftX="672" topLeftY="270" alpha="0.95" type="rect"> - <fill> - <fillColor color="rgba(157, 197, 192, 1)"/> - </fill> - </shape> - <shape width="288" height="270" topLeftX="385" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="288" height="270" topLeftX="385" topLeftY="270" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>检查理解程度</p> - </content> - </shape> - <shape width="300" height="68" topLeftX="66" topLeftY="79" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" bold="false" lineSpacing="multiple:1.7" list="none"> - <p list="none" lineSpacing="multiple:1.7">在培训课程结束时,检查一下对我们讨论过的主题的理解。</p> - </content> - </shape> - <shape width="132" height="118" topLeftX="404" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" letterSpacing="8"> - <p letterSpacing="8">Q1</p> - </content> - </shape> - <shape width="245" height="60" topLeftX="408" topLeftY="142" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.4">在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="50" height="8" topLeftX="461" topLeftY="128" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="132" height="118" topLeftX="692" topLeftY="31" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" letterSpacing="8"> - <p letterSpacing="8">Q2</p> - </content> - </shape> - <shape width="245" height="60" topLeftX="695" topLeftY="142" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.4">在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="50" height="8" topLeftX="748" topLeftY="128" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="132" height="118" topLeftX="404" topLeftY="310" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" letterSpacing="8"> - <p letterSpacing="8">Q3</p> - </content> - </shape> - <shape width="245" height="60" topLeftX="408" topLeftY="420" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.4">在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="50" height="8" topLeftX="461" topLeftY="407" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="132" height="118" topLeftX="691" topLeftY="310" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" letterSpacing="8"> - <p letterSpacing="8">Q4</p> - </content> - </shape> - <shape width="245" height="60" topLeftX="695" topLeftY="420" alpha="0.8" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="false" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.4">在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <shape width="50" height="8" topLeftX="748" topLeftY="407" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>17</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <shape width="1" height="540" topLeftX="46" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </shape> - <shape width="337" height="83" topLeftX="66" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)"> - <p>在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。在此输入信息以解释你的标题。</p> - </content> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>18</p> - </content> - </shape> - <shape width="337" height="41" topLeftX="66" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true"> - <p>讨论板</p> - </content> - </shape> - <shape width="421" height="629" topLeftX="484" topLeftY="-111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="400" fontFamily="Sans Serif" color="rgba(60, 60, 60, 1)" bold="true" textAlign="right"> - <p>7</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </style> - <data> - <shape width="542" height="286" topLeftX="-185" topLeftY="99" rotation="144" alpha="0.32" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(220, 221, 169, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="723" topLeftY="141" rotation="54" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="rgba(157, 197, 192, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="330" topLeftY="-212" rotation="54" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(126, 185, 178, 1)"/> - </fill> - </shape> - <shape width="600" height="286" topLeftX="405" topLeftY="418" rotation="144" alpha="0.32" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 214, 188, 1)"/> - </fill> - </shape> - <shape width="300" height="300" topLeftX="43" topLeftY="484" rotation="54" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(102, 130, 194, 1)"/> - </fill> - </shape> - <shape width="46" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(60, 60, 60, 1)"/> - </fill> - </shape> - <icon width="22" height="22" topLeftX="12" topLeftY="35" iconType="iconpark/Brand/bydesign.svg"> - <fill> - <fillColor color="rgba(247, 245, 240, 1)"/> - </fill> - </icon> - <shape width="612" height="141" topLeftX="313" topLeftY="89" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" bold="true" letterSpacing="1"> - <p letterSpacing="1">感谢您的观看,</p> - <p letterSpacing="1">如有任何问题请随时联系!</p> - </content> - </shape> - <shape width="46" height="39" topLeftX="0" topLeftY="461" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="Sans Serif" color="rgba(247, 245, 240, 1)" bold="true" textAlign="center"> - <p>19</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/hr--onboarding.xml b/skills/lark-slides/assets/templates/hr--onboarding.xml deleted file mode 100644 index 52b05770b..000000000 --- a/skills/lark-slides/assets/templates/hr--onboarding.xml +++ /dev/null @@ -1,933 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>新人入职培训 - - - - <headline fontColor="#000000FF" fontSize="54"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="SC2Wbh3kaopv4Jxk1cXc4laHnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" presetHandlers="0" alpha="0.63" type="rect"> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </shape> - <shape width="312" height="56" topLeftX="324" topLeftY="289" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="290" height="92" topLeftX="335" topLeftY="197" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p>新人培训</p> - </content> - </shape> - <shape width="900" height="40" topLeftX="30" topLeftY="476" presetHandlers="48" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="30" height="30" topLeftX="36" topLeftY="481" type="ellipse"> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </shape> - <icon width="18" height="18" topLeftX="43" topLeftY="487" iconType="iconpark/Arrows/arrow-right.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="126" height="44" topLeftX="66" topLeftY="474" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="left"> - <p> - <span color="rgba(44, 40, 64, 1)" fontSize="16">进入今日议程</span> - </p> - </content> - </shape> - <shape width="127" height="44" topLeftX="795" topLeftY="474" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="right"> - <p> - <span color="rgba(44, 40, 64, 1)" fontSize="16">2026.05.04</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="100" height="68" topLeftX="59" topLeftY="47" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p>目录</p> - </content> - </shape> - <shape width="311" height="56" topLeftX="59" topLeftY="115" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="62" topLeftY="267" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">1</span> - </strong> - </p> - </content> - </shape> - <line startX="153" startY="370" endX="471" endY="371" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="70" height="70" topLeftX="62" topLeftY="385" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">3</span> - </strong> - </p> - </content> - </shape> - <line startX="581" startY="370" endX="898" endY="371" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="70" height="70" topLeftX="489" topLeftY="267" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">2</span> - </strong> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="489" topLeftY="385" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">4</span> - </strong> - </p> - </content> - </shape> - <shape width="100" height="44" topLeftX="153" topLeftY="267" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>公司概况</strong> - </p> - </content> - </shape> - <shape width="100" height="44" topLeftX="153" topLeftY="385" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>规章制度</strong> - </p> - </content> - </shape> - <shape width="311" height="56" topLeftX="153" topLeftY="302" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="311" height="56" topLeftX="153" topLeftY="420" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="100" height="44" topLeftX="581" topLeftY="270" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>开始旅程</strong> - </p> - </content> - </shape> - <shape width="311" height="56" topLeftX="581" topLeftY="305" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="100" height="44" topLeftX="581" topLeftY="385" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>公司福利</strong> - </p> - </content> - </shape> - <shape width="311" height="56" topLeftX="581" topLeftY="420" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </style> - <data> - <img src="XWWzbxvZmoztg2xETpEcw22mnEd" width="328" height="432" topLeftX="571" topLeftY="54"> - <crop type="rect" leftOffset="0.05" rightOffset="0.05" topOffset="0" bottomOffset="0" presetHandlers="24"/> - </img> - <shape width="381" height="44" topLeftX="67" topLeftY="260" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">请输入相关描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="485" height="85" topLeftX="62" topLeftY="294" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p>公司概况</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="LHhDbYrgZo4vVVxiVmZc85dDn6d" width="194" height="236" topLeftX="487" topLeftY="229"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="39" bottomOffset="39" presetHandlers="18"/> - </img> - <img src="AooSbNkPko0FWUxrsAJchJgen5j" width="194" height="316" topLeftX="706" topLeftY="55" saturation="11"> - <crop type="rect" leftOffset="0.8" rightOffset="0.8" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="B0aKbJkekobG8exkYDIcZlcrnRd" width="194" height="236" topLeftX="487" topLeftY="-27"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="3" bottomOffset="3" presetHandlers="18"/> - </img> - <img src="WGEZb10uxoKMfoxPIHNcha7anxe" width="194" height="164" topLeftX="706" topLeftY="391" saturation="34"> - <crop type="rect" leftOffset="56" rightOffset="18" topOffset="32" bottomOffset="161" presetHandlers="18"/> - </img> - <shape width="240" height="68" topLeftX="65" topLeftY="116" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p>创始人的故事</p> - </content> - </shape> - <shape width="354" height="164" topLeftX="65" topLeftY="203" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">这里可以展示创始人的职业经历。描述他如何在各种困难的条件下建立了公司</span> - </p> - <p/> - <p> - <span fontSize="16">描述他的理念和梦想,及为此付出的努力</span> - </p> - <p/> - <p> - <span fontSize="16">描述公司取得的成绩及下一个 10 年的目标规划</span> - </p> - </content> - </shape> - </data> - </slide> - <slide> - <style> - <fill> - <fillImg src="Q9D9b6hOnoRxsgxSwU0cx3tAn1c" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" presetHandlers="0" alpha="0.7" type="rect"> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </shape> - <shape width="131" height="42" topLeftX="56" topLeftY="36" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2" letterSpacing="2" textAlign="left"> - <p lineSpacing="multiple:1.2" letterSpacing="2"> - <span color="rgba(255, 255, 255, 1)" fontSize="18">公司愿景</span> - </p> - </content> - </shape> - <shape width="53" height="53" topLeftX="56" topLeftY="429" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="32" height="32" topLeftX="67" topLeftY="439" iconType="iconpark/Arrows/arrow-right.svg"> - <border color="rgba(75, 63, 221, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="822" height="164" topLeftX="56" topLeftY="98" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p letterSpacing="1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</span> - </strong> - </p> - </content> - </shape> - </data> - </slide> - <slide> - <style/> - <data> - <shape width="210" height="264" topLeftX="55" topLeftY="178" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </shape> - <shape width="82" height="82" topLeftX="70" topLeftY="191" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="43" height="43" topLeftX="90" topLeftY="211" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(75, 63, 221, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="74" topLeftX="70" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="70" topLeftY="317" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">始终创业</span> - </p> - </content> - </shape> - <shape width="210" height="264" topLeftX="268" topLeftY="178" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </shape> - <shape width="82" height="82" topLeftX="283" topLeftY="191" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="43" height="43" topLeftX="303" topLeftY="211" iconType="iconpark/Abstract/cylinder.svg"> - <border color="rgba(44, 40, 64, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="44" topLeftX="283" topLeftY="317" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">坦诚清晰</span> - </p> - </content> - </shape> - <shape width="180" height="74" topLeftX="283" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="210" height="264" topLeftX="482" topLeftY="178" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </shape> - <shape width="82" height="82" topLeftX="497" topLeftY="191" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="43" height="43" topLeftX="516" topLeftY="211" iconType="iconpark/Abstract/game-emoji.svg"> - <border color="rgba(75, 63, 221, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="44" topLeftX="497" topLeftY="317" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">多元兼容</span> - </p> - </content> - </shape> - <shape width="180" height="74" topLeftX="497" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="210" height="264" topLeftX="695" topLeftY="178" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </shape> - <shape width="82" height="82" topLeftX="710" topLeftY="191" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="43" height="43" topLeftX="729" topLeftY="211" iconType="iconpark/Abstract/oval-love-two.svg"> - <border color="rgba(44, 40, 64, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="44" topLeftX="710" topLeftY="317" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">求真务实</span> - </p> - </content> - </shape> - <shape width="180" height="74" topLeftX="710" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="456" height="38" topLeftX="252" topLeftY="108" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="487" height="68" topLeftX="236" topLeftY="46" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" textAlign="center"> - <p>价值观</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </style> - <data> - <img src="U9DGbgUQmo8Vg2xdYyfcLVKunqb" width="328" height="432" topLeftX="571" topLeftY="54"> - <crop type="rect" leftOffset="52" rightOffset="52" topOffset="0" bottomOffset="0" presetHandlers="24"/> - </img> - <shape width="381" height="44" topLeftX="67" topLeftY="260" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">请输入相关描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="485" height="85" topLeftX="62" topLeftY="294" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="54">开始你的旅程</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="558" startY="404" endX="839" endY="403" alpha="0.5"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="367" height="92" topLeftX="62" topLeftY="367" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 40, 64, 1)" textAlign="left"> - <p> - <span color="rgba(44, 40, 64, 1)" fontSize="12">当开始时,我们会进行头脑风暴,分享彼此的想法,并从中激发灵感。在经过一系列的讨论后,开始制定策略,拟定计划。并开始进行分工合作,明确各个成员的职责。最后定期复盘进展,确保计划顺利执行。</span> - </p> - </content> - </shape> - <img src="KImsboGLOoVLYexRUlScDoygnud" width="849" height="201" topLeftX="60" topLeftY="48" exposure="-16" contrast="19" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="256" bottomOffset="660" presetHandlers="18"/> - </img> - <shape width="180" height="58" topLeftX="144" topLeftY="289" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="32">入职流程</span> - </strong> - </p> - </content> - </shape> - <icon width="60" height="60" topLeftX="73" topLeftY="283" iconType="iconpark/Travel/cable-car.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="12" height="12" topLeftX="550" topLeftY="398" type="ellipse"> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </shape> - <shape width="12" height="12" topLeftX="645" topLeftY="398" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </shape> - <shape width="12" height="12" topLeftX="739" topLeftY="398" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </shape> - <shape width="12" height="12" topLeftX="833" topLeftY="398" type="ellipse"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </shape> - <shape width="76" height="38" topLeftX="541" topLeftY="412" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="12">签订合同</span> - </strong> - </p> - </content> - </shape> - <shape width="76" height="38" topLeftX="635" topLeftY="412" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="12">入职手续</span> - </strong> - </p> - </content> - </shape> - <shape width="76" height="38" topLeftX="729" topLeftY="412" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="12">申请设备</span> - </strong> - </p> - </content> - </shape> - <shape width="76" height="38" topLeftX="823" topLeftY="412" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="12">培训安排</span> - </strong> - </p> - </content> - </shape> - </data> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </style> - <data> - <shape width="236" height="44" topLeftX="421" topLeftY="151" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">身份证 #1</span> - </p> - </content> - </shape> - <shape width="208" height="56" topLeftX="421" topLeftY="184" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="254" height="56" topLeftX="69" topLeftY="155" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="236" height="44" topLeftX="704" topLeftY="358" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">体检证明 #4</span> - </p> - </content> - </shape> - <shape width="208" height="56" topLeftX="704" topLeftY="391" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="236" height="44" topLeftX="421" topLeftY="358" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">学历/学位证明 #3</span> - </p> - </content> - </shape> - <shape width="208" height="56" topLeftX="421" topLeftY="391" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="236" height="44" topLeftX="704" topLeftY="151" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">银行卡 #2</span> - </p> - </content> - </shape> - <shape width="208" height="56" topLeftX="704" topLeftY="184" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="270" height="68" topLeftX="71" topLeftY="91" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">入职手续</span> - </strong> - </p> - </content> - </shape> - <icon width="60" height="60" topLeftX="433" topLeftY="91" iconType="iconpark/Peoples/id-card-h.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="711" topLeftY="91" iconType="iconpark/Money/bank-card.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="433" topLeftY="297" iconType="iconpark/Clothes/bachelor-cap-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="711" topLeftY="297" iconType="iconpark/Health/eeg.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </style> - <data> - <shape width="42" height="42" topLeftX="822" topLeftY="244" alpha="0.2" type="ellipse"> - <border color="rgba(44, 40, 64, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="25" height="25" topLeftX="831" topLeftY="252" alpha="0.2" iconType="iconpark/Arrows/arrow-right.svg"> - <border color="rgba(44, 40, 64, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="865" height="454" topLeftX="47" topLeftY="43" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="TbzSb8bX7oZhvoxGHYoch6qfnAg" width="296" height="408" topLeftX="72" topLeftY="66"> - <crop type="rect" leftOffset="56" rightOffset="56" topOffset="0" bottomOffset="0"/> - </img> - <shape width="404" height="68" topLeftX="415" topLeftY="160" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="32">办公设备申请</span> - </strong> - </p> - </content> - </shape> - <shape width="263" height="128" topLeftX="415" topLeftY="218" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p list="none">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <icon width="25" height="25" topLeftX="831" topLeftY="252" alpha="0.2" iconType="iconpark/Arrows/arrow-right.svg"> - <border color="rgba(44, 40, 64, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="42" height="42" topLeftX="822" topLeftY="244" alpha="0.2" type="ellipse"> - <border color="rgba(44, 40, 64, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </style> - <data> - <img src="YDX8brid2ofS9vxsbDCcW5MfnHd" width="328" height="432" topLeftX="571" topLeftY="54"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="2" bottomOffset="2" presetHandlers="24"/> - </img> - <shape width="381" height="44" topLeftX="67" topLeftY="260" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">请输入相关描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="485" height="85" topLeftX="62" topLeftY="294" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="54">规章制度</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </style> - <data> - <shape width="421" height="449" topLeftX="53" topLeftY="46" presetHandlers="24" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="421" height="449" topLeftX="487" topLeftY="46" presetHandlers="24" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="GduebSB0doQ9vAxRVTBcwJOIncf" width="358" height="202" topLeftX="518" topLeftY="74"> - <crop type="rect" leftOffset="22" rightOffset="22" topOffset="0" bottomOffset="0"/> - </img> - <img src="Dwv9bc5ngozIaAxH02CcjmptnBs" width="358" height="202" topLeftX="84" topLeftY="74"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <shape width="221" height="74" topLeftX="222" topLeftY="373" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="221" height="44" topLeftX="222" topLeftY="339" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>年度旅游福利</p> - </content> - </shape> - <shape width="221" height="74" topLeftX="656" topLeftY="373" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="221" height="44" topLeftX="656" topLeftY="339" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">如何处理病假</span> - </strong> - </p> - </content> - </shape> - <shape width="100" height="100" topLeftX="84" topLeftY="343" presetHandlers="100" type="round-rect"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </shape> - <icon width="49" height="49" topLeftX="111" topLeftY="369" rotation="90" iconType="iconpark/Travel/airplane.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </icon> - <shape width="100" height="100" topLeftX="517" topLeftY="343" presetHandlers="100" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(44, 40, 64, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="49" height="49" topLeftX="543" topLeftY="369" iconType="iconpark/Health/cross-society.svg"> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(75, 63, 221, 1)"/> - </fill> - </style> - <data> - <img src="FLAWbzsymo9ZUHxmDAkcNe40nbb" width="328" height="432" topLeftX="571" topLeftY="54"> - <crop type="rect" leftOffset="52" rightOffset="52" topOffset="0" bottomOffset="0" presetHandlers="24"/> - </img> - <shape width="381" height="44" topLeftX="67" topLeftY="260" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">请输入相关描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="485" height="85" topLeftX="62" topLeftY="294" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="54">公司福利</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <undefined type="fallback"/> - <shape width="255" height="92" topLeftX="341" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul listStyle="circle-hollow-square"> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #1</span> - </p> - </li> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #2</span> - </p> - </li> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #3</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="260" height="74" topLeftX="52" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <ul listStyle="circle-hollow-square"> - <li> - <p> - <span color="rgba(255, 255, 255, 1)">关键点 #1</span> - </p> - </li> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #</span> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2</span> - </p> - </li> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #3</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="260" height="92" topLeftX="634" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul listStyle="circle-hollow-square"> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #1</span> - </p> - </li> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #2</span> - </p> - </li> - <li> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">关键点 #3</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="487" height="68" topLeftX="236" topLeftY="46" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">公司福利</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 40, 64, 1)"/> - </fill> - </style> - <data> - <shape width="404" height="116" topLeftX="278" topLeftY="202" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">愿你在这里度过愉快的时光</span> - </strong> - </p> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">并在我们的团队中取得成功</span> - </strong> - </p> - </content> - </shape> - </data> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--brand_communication.xml b/skills/lark-slides/assets/templates/marketing--brand_communication.xml deleted file mode 100644 index 4f1d6cdc2..000000000 --- a/skills/lark-slides/assets/templates/marketing--brand_communication.xml +++ /dev/null @@ -1,1367 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>品牌传播方案 - - - - - - - <headline fontColor="#000000FF" fontSize="36"/> - <sub-headline fontColor="#000000FF" fontSize="28"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style/> - <data> - <img src="YbHYbrBDQoc7xrxu3sJcWWS8n4b" width="654" height="564" topLeftX="260" topLeftY="-24" alpha="0.55"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="399" height="404" topLeftX="289" topLeftY="68" rotation="347" alpha="0.77" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="161" blur="150" color="rgba(79, 196, 147, 0.82)"/> - </shape> - <shape width="399" height="404" topLeftX="289" topLeftY="68" rotation="347" type="ellipse"> - <fill> - <fillColor color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)"/> - </fill> - <border color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="49" blur="77" color="rgba(23, 91, 194, 0.44)"/> - </shape> - <shape width="399" height="404" topLeftX="289" topLeftY="68" rotation="347" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="200" angle="0" blur="150" color="rgba(79, 196, 147, 0.56)"/> - </shape> - <shape width="506" height="193" topLeftX="32" topLeftY="296" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(0, 0, 0, 1)" bold="true" underline="false"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="72" underline="false">品牌</span> - </strong> - </p> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="72" underline="false">传播方案</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="38" topLeftX="760" topLeftY="352" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示者:小张和小王</span> - </strong> - </p> - </content> - </shape> - <img src="MNT2bZ2pKoXX8lxKl42ctElLnDc" width="75" height="75" topLeftX="760" topLeftY="402" alpha="0.96"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="540"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <img src="WOGWbt8S2oBh7hxnePJckDTcnZf" width="75" height="75" topLeftX="826" topLeftY="402" alpha="0.96"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="540"/> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </img> - <icon width="24" height="24" topLeftX="28" topLeftY="29" iconType="iconpark/Charts/chart-ring.svg"> - <border color="rgba(44, 44, 45, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="196" height="32" topLeftX="46" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 44, 45, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(44, 44, 45, 1)" fontSize="12">LOGO</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Hme0bn76DoCxQKxHig9cS9w9nWg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="358" height="68" topLeftX="95" topLeftY="352" presetHandlers="80" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(121, 199, 255, 0.39) 0%,rgba(161, 255, 210, 0.68) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(44, 44, 45, 1)"> - <p> - <span color="rgba(44, 44, 45, 1)" fontSize="20">品牌传播策略</span> - </p> - </content> - </shape> - <shape width="51" height="51" topLeftX="104" topLeftY="360" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="20">3</span> - </strong> - </p> - </content> - </shape> - <shape width="358" height="68" topLeftX="95" topLeftY="261" presetHandlers="80" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(121, 199, 255, 0.39) 0%,rgba(161, 255, 210, 0.68) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(44, 44, 45, 1)"> - <p> - <span color="rgba(44, 44, 45, 1)" fontSize="20">品牌概述</span> - </p> - </content> - </shape> - <shape width="51" height="51" topLeftX="104" topLeftY="269" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="20">1</span> - </strong> - </p> - </content> - </shape> - <shape width="358" height="68" topLeftX="538" topLeftY="261" presetHandlers="80" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(121, 199, 255, 0.39) 0%,rgba(161, 255, 210, 0.68) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(44, 44, 45, 1)"> - <p> - <span color="rgba(44, 44, 45, 1)" fontSize="20">品牌传播分析</span> - </p> - </content> - </shape> - <shape width="51" height="51" topLeftX="547" topLeftY="269" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="20">2</span> - </strong> - </p> - </content> - </shape> - <shape width="358" height="68" topLeftX="538" topLeftY="352" presetHandlers="80" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(121, 199, 255, 0.39) 0%,rgba(161, 255, 210, 0.68) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(44, 44, 45, 1)"> - <p> - <span color="rgba(44, 44, 45, 1)" fontSize="20">品牌传播创意</span> - </p> - </content> - </shape> - <shape width="51" height="51" topLeftX="547" topLeftY="360" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="20">4</span> - </strong> - </p> - </content> - </shape> - <shape width="238" height="87" topLeftX="93" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true" lineSpacing="multiple:1.4"> - <p>目录</p> - </content> - </shape> - <shape width="404" height="58" topLeftX="93" topLeftY="129" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="true" lineSpacing="multiple:1.35"> - <p>Contents</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="AjidbbCsOoao9LxjA85cEdK8nhe" width="353" height="300" topLeftX="-26" topLeftY="83" flipX="true" alpha="0.55"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" alpha="0.77" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="78" angle="202" blur="150" color="rgba(79, 196, 147, 0.61)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)"/> - </fill> - <border color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="49" blur="77" color="rgba(23, 91, 194, 0.44)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="200" angle="180" blur="150" color="rgba(79, 196, 147, 0.56)"/> - </shape> - <shape width="564" height="110" topLeftX="401" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>品牌概述</p> - </content> - </shape> - <shape width="112" height="110" topLeftX="211" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>01 | 品牌概述</p> - </content> - </shape> - <shape width="416" height="61" topLeftX="83" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p>发展回顾</p> - </content> - </shape> - <undefined type="fallback"/> - <line startX="280" startY="256" endX="374" endY="256"> - <border color="rgba(44, 44, 45, 1)" dashArray="dot" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="591" startY="256" endX="684" endY="256"> - <border color="rgba(44, 44, 45, 1)" dashArray="dot" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>01 | 品牌概述</p> - </content> - </shape> - <shape width="416" height="61" topLeftX="83" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p>品牌项目</p> - </content> - </shape> - <shape width="512" height="512" topLeftX="16" topLeftY="149" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(81, 191, 255, 0.23) 0%,rgba(161, 255, 216, 0) 35%,rgba(161, 255, 204, 0) 100%)"/> - </fill> - <border color="linear-gradient(180deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 0) 52%,rgba(161, 255, 179, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="377" height="377" topLeftX="84" topLeftY="259" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(81, 191, 255, 0.23) 0%,rgba(161, 255, 216, 0) 35%,rgba(161, 255, 204, 0) 100%)"/> - </fill> - <border color="linear-gradient(180deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 0) 52%,rgba(161, 255, 179, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="232" height="232" topLeftX="157" topLeftY="369" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(89, 194, 255, 0.23) 0%,rgba(161, 255, 204, 0) 23%,rgba(161, 255, 210, 0) 100%)"/> - </fill> - <border color="linear-gradient(180deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 0) 52%,rgba(161, 255, 179, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="141" height="41" topLeftX="202" topLeftY="185" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="center"> - <p> - <strong>低端市场</strong> - </p> - </content> - </shape> - <shape width="141" height="41" topLeftX="202" topLeftY="310" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="center"> - <p> - <strong>中端市场</strong> - </p> - </content> - </shape> - <shape width="141" height="41" topLeftX="202" topLeftY="428" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="center"> - <p> - <strong>高端市场</strong> - </p> - </content> - </shape> - <shape width="330" height="62" topLeftX="569" topLeftY="445" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="330" height="44" topLeftX="569" topLeftY="413" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35"> - <p>关键结论 #3</p> - </content> - </shape> - <shape width="330" height="62" topLeftX="569" topLeftY="316" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="330" height="44" topLeftX="569" topLeftY="284" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35"> - <p>关键结论 #2</p> - </content> - </shape> - <shape width="330" height="44" topLeftX="569" topLeftY="159" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35"> - <p>关键结论 #1</p> - </content> - </shape> - <shape width="330" height="62" topLeftX="569" topLeftY="190" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p>01 | 品牌概述</p> - </content> - </shape> - <shape width="416" height="61" topLeftX="83" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p>品牌目标</p> - </content> - </shape> - <shape width="404" height="404" topLeftX="107" topLeftY="117" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <shadow blur="97" color="rgba(64, 204, 112, 0.15)"/> - </shape> - <shape width="404" height="404" topLeftX="449" topLeftY="117" alpha="0.92" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <shadow blur="97" color="rgba(37, 202, 182, 0.15)"/> - </shape> - <icon width="54" height="54" topLeftX="624" topLeftY="167" iconType="iconpark/Travel/earth.svg"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(76, 169, 223, 1) 0%,rgba(161, 255, 179, 1) 100%)"/> - </fill> - <border color="linear-gradient(90deg,rgba(76, 169, 223, 1) 0%,rgba(161, 255, 179, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="54" height="54" topLeftX="282" topLeftY="167" iconType="iconpark/Travel/local-two.svg"> - <border color="linear-gradient(90deg,rgba(76, 169, 223, 1) 0%,rgba(161, 255, 179, 1) 100%)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="240" height="44" topLeftX="189" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">品牌宗旨</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="146" topLeftX="189" topLeftY="281" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">演示文稿是实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中内容,可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="240" height="44" topLeftX="531" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)">品牌理念</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="146" topLeftX="531" topLeftY="281" alpha="0.75" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">演示文稿是实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中内容,可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="100" height="101" topLeftX="63" topLeftY="402" type="ellipse"> - <border color="linear-gradient(90deg,rgba(76, 169, 223, 0.61) 0%,rgba(161, 255, 179, 0.65) 100%)" width="32" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="92" height="92" topLeftX="771" topLeftY="121" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(76, 169, 223, 0.61) 0%,rgba(161, 255, 179, 0.65) 100%)"/> - </fill> - <shadow offset="14" angle="90" blur="108" color="rgba(100, 232, 214, 0.5)"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="AjidbbCsOoao9LxjA85cEdK8nhe" width="353" height="300" topLeftX="-26" topLeftY="83" flipX="true" alpha="0.55"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" alpha="0.77" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="78" angle="202" blur="150" color="rgba(79, 196, 147, 0.61)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)"/> - </fill> - <border color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="49" blur="77" color="rgba(23, 91, 194, 0.44)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="200" angle="180" blur="150" color="rgba(79, 196, 147, 0.56)"/> - </shape> - <shape width="564" height="110" topLeftX="401" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>品牌分析传播</p> - </content> - </shape> - <shape width="112" height="110" topLeftX="211" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="263" height="263" topLeftX="348" topLeftY="173" alpha="0.2" type="ellipse"> - <border color="linear-gradient(90deg,rgba(76, 169, 223, 0.61) 0%,rgba(161, 255, 179, 0.65) 100%)" width="36" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="163" height="163" topLeftX="398" topLeftY="222" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(76, 169, 223, 0.26) 0%,rgba(161, 255, 179, 0.4) 100%)"/> - </fill> - </shape> - <shape width="69" height="69" topLeftX="329" topLeftY="190" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="9" blur="44" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <icon width="30" height="30" topLeftX="349" topLeftY="210" iconType="iconpark/Music/waves-right.svg"> - <border color="rgba(0, 0, 0, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="69" height="69" topLeftX="328" topLeftY="342" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="9" blur="44" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="69" height="69" topLeftX="562" topLeftY="190" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="9" blur="44" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="69" height="69" topLeftX="562" topLeftY="342" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="9" blur="44" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <icon width="30" height="30" topLeftX="582" topLeftY="210" iconType="iconpark/Components/switch-button.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="30" height="30" topLeftX="348" topLeftY="362" iconType="iconpark/Office/application-effect.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="30" height="30" topLeftX="582" topLeftY="362" iconType="iconpark/Music/monitor-two.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p> - 02 | - <strong> - <span fontSize="14">品牌分析传播</span> - </strong> - </p> - </content> - </shape> - <shape width="416" height="61" topLeftX="83" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p>品牌建设分析</p> - </content> - </shape> - <shape width="283" height="38" topLeftX="338" topLeftY="297" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">PRODUCT PLAN</span> - </p> - </content> - </shape> - <shape width="284" height="47" topLeftX="338" topLeftY="270" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">产品计划</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="44" topLeftX="35" topLeftY="183" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">流量竞争</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="44" topLeftX="35" topLeftY="332" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">布局策略</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="35" topLeftY="370" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="right"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="35" topLeftY="221" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="right"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="240" height="44" topLeftX="685" topLeftY="183" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">产品转型</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="44" topLeftX="685" topLeftY="332" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">管理模式</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="685" topLeftY="370" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="685" topLeftY="221" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">02 | 品牌分析传播</span> - </strong> - </p> - </content> - </shape> - <shape width="416" height="61" topLeftX="93" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p>问题梳理</p> - </content> - </shape> - <shape width="240" height="260" topLeftX="89" topLeftY="163" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" blur="150" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="68" topLeftX="103" topLeftY="252" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>品牌如何打破行业壁垒,获取注意力?</strong> - </p> - </content> - </shape> - <shape width="212" height="83" topLeftX="103" topLeftY="324" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(161, 161, 161, 1)" textAlign="left"> - <p> - <span color="rgba(161, 161, 161, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="212" height="68" topLeftX="103" topLeftY="175" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(180deg,rgba(0, 0, 0, 1) 0%,rgba(0, 0, 0, 0.471) 100%)" fontSize="40">ONE</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="240" height="260" topLeftX="360" topLeftY="163" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" blur="150" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="68" topLeftX="374" topLeftY="252" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>品牌如何巩固且提升行业影响力?</strong> - </p> - </content> - </shape> - <shape width="212" height="83" topLeftX="374" topLeftY="324" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(161, 161, 161, 1)" textAlign="left"> - <p> - <span color="rgba(161, 161, 161, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="212" height="68" topLeftX="374" topLeftY="175" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(180deg,rgba(0, 0, 0, 1) 0%,rgba(0, 0, 0, 0.471) 100%)" fontSize="40">TWO</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="240" height="260" topLeftX="631" topLeftY="163" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" blur="150" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="68" topLeftX="645" topLeftY="252" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong>如何提高品牌口碑,强化竞争力?</strong> - </p> - </content> - </shape> - <shape width="212" height="83" topLeftX="644" topLeftY="324" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(161, 161, 161, 1)" textAlign="left"> - <p> - <span color="rgba(161, 161, 161, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="212" height="68" topLeftX="644" topLeftY="175" alpha="0.27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(54, 115, 255, 1) 0%,rgba(0, 86, 255, 0.412) 83%,rgba(219, 228, 246, 0) 100%)" italic="true" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <em> - <span color="linear-gradient(180deg,rgba(0, 0, 0, 1) 0%,rgba(0, 0, 0, 0.471) 100%)" fontSize="40">THREE</span> - </em> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="AjidbbCsOoao9LxjA85cEdK8nhe" width="353" height="300" topLeftX="-26" topLeftY="83" flipX="true" alpha="0.55"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" alpha="0.77" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="78" angle="202" blur="150" color="rgba(79, 196, 147, 0.61)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)"/> - </fill> - <border color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="49" blur="77" color="rgba(23, 91, 194, 0.44)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="200" angle="180" blur="150" color="rgba(79, 196, 147, 0.56)"/> - </shape> - <shape width="564" height="110" topLeftX="401" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>品牌传播策略</p> - </content> - </shape> - <shape width="112" height="110" topLeftX="211" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <span fontSize="14">03 | 品牌传播策略</span> - </p> - </content> - </shape> - <shape width="416" height="61" topLeftX="93" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p>品牌 IP 区域化</p> - </content> - </shape> - <shape width="229" height="229" topLeftX="460" topLeftY="239" presetHandlers="228" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(76, 169, 223, 0.31) 0%,rgba(161, 255, 179, 1) 100%)"/> - </fill> - <shadow offset="14" angle="187" blur="70" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="128" height="62" topLeftX="511" topLeftY="322" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true" italic="true" textAlign="center"> - <p> - <strong> - <em> - <span color="rgba(31, 35, 41, 1)" fontSize="28">55%</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="180" height="180" topLeftX="271" topLeftY="252" presetHandlers="228" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 255, 0.5) 0%,rgba(255, 255, 255, 1) 100%)"/> - </fill> - <border color="linear-gradient(90deg,rgba(76, 169, 223, 0.31) 0%,rgba(161, 255, 179, 1) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="66" blur="53" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="128" height="62" topLeftX="297" topLeftY="311" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true" italic="true" textAlign="center"> - <p> - <strong> - <em> - <span color="rgba(31, 35, 41, 1)" fontSize="28">30%</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="138" height="138" topLeftX="382" topLeftY="127" presetHandlers="228" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 255, 0.5) 0%,rgba(255, 255, 255, 1) 100%)"/> - </fill> - <border color="linear-gradient(90deg,rgba(76, 169, 223, 0.31) 0%,rgba(161, 255, 179, 1) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="187" blur="100" color="rgba(0, 0, 0, 0.08)"/> - </shape> - <shape width="116" height="62" topLeftX="393" topLeftY="165" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true" italic="true" textAlign="center"> - <p> - <strong> - <em> - <span color="rgba(31, 35, 41, 1)" fontSize="28">15%</span> - </em> - </strong> - </p> - </content> - </shape> - <shape width="202" height="44" topLeftX="533" topLeftY="137" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">产品转型</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="56" topLeftX="533" topLeftY="165" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题</span> - </p> - <p> - <span fontSize="12">现在就开始打字吧</span> - </p> - </content> - </shape> - <shape width="202" height="44" topLeftX="701" topLeftY="306" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">产品转型</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="56" topLeftX="701" topLeftY="334" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题</span> - </p> - <p> - <span fontSize="12">现在就开始打字吧</span> - </p> - </content> - </shape> - <shape width="202" height="44" topLeftX="57" topLeftY="302" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">产品转型</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="56" topLeftX="57" topLeftY="331" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="right"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题</span> - </p> - <p> - <span fontSize="12">现在就开始打字吧</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">03 | 品牌传播策略</span> - </strong> - </p> - </content> - </shape> - <shape width="416" height="61" topLeftX="83" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.3"> - <strong> - <span fontSize="30">社群品牌盛典化</span> - </strong> - </p> - </content> - </shape> - <shape width="722" height="56" topLeftX="83" topLeftY="392" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span color="rgba(161, 161, 161, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="156" height="64" topLeftX="309" topLeftY="229" presetHandlers="60" type="round-rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">情人节活动</span> - </p> - </content> - </shape> - <line startX="338" startY="192" endX="338" endY="221"> - <border color="rgba(31, 35, 41, 1)" dashArray="dot" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="313" topLeftY="158" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.02.14</span> - </p> - </content> - </shape> - <shape width="156" height="64" topLeftX="91" topLeftY="229" presetHandlers="60" type="round-rect"> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)">跨年活动</span> - </p> - </content> - </shape> - <line startX="120" startY="192" endX="120" endY="221"> - <border color="rgba(31, 35, 41, 1)" dashArray="dot" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="95" topLeftY="158" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.01.01</span> - </p> - </content> - </shape> - <shape width="156" height="64" topLeftX="746" topLeftY="229" presetHandlers="60" type="round-rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">双十一购物节</span> - </p> - </content> - </shape> - <line startX="774" startY="192" endX="774" endY="221"> - <border color="rgba(31, 35, 41, 1)" dashArray="dot" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="750" topLeftY="158" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.11.11</span> - </p> - </content> - </shape> - <shape width="156" height="64" topLeftX="527" topLeftY="229" presetHandlers="60" type="round-rect"> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)">618 购物节</span> - </p> - </content> - </shape> - <line startX="556" startY="192" endX="556" endY="221"> - <border color="rgba(31, 35, 41, 1)" dashArray="dot" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="531" topLeftY="158" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.06.18</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="101" topLeftY="305" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>活动描述</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="319" topLeftY="305" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>活动描述</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="537" topLeftY="305" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>活动描述</p> - </content> - </shape> - <shape width="99" height="38" topLeftX="756" topLeftY="305" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>活动描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HQLGbGBstowtlExrFa3cAPA5nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">03 | 品牌传播策略</span> - </strong> - </p> - </content> - </shape> - <shape width="416" height="61" topLeftX="83" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.3"> - <strong> - <span fontSize="30">品牌代言人体系化</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="AjidbbCsOoao9LxjA85cEdK8nhe" width="353" height="300" topLeftX="-26" topLeftY="83" flipX="true" alpha="0.55"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" alpha="0.77" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="78" angle="202" blur="150" color="rgba(79, 196, 147, 0.61)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)"/> - </fill> - <border color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="49" blur="77" color="rgba(23, 91, 194, 0.44)"/> - </shape> - <shape width="215" height="215" topLeftX="111" topLeftY="139" flipX="true" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="200" angle="180" blur="150" color="rgba(79, 196, 147, 0.56)"/> - </shape> - <shape width="564" height="110" topLeftX="401" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>品牌传播创意</p> - </content> - </shape> - <shape width="112" height="110" topLeftX="211" topLeftY="215" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1.4"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="MV41bXGlYoTiIAxyTkgcAoCCnzg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="RQ4bb50gposPVmxmeBIcJiuMnpd" width="204" height="380" topLeftX="713" topLeftY="80"> - <crop type="rect" leftOffset="0.12" rightOffset="0.12" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="VITubmUtxojYycxhKYVcML9un5L" width="162" height="132" topLeftX="537" topLeftY="328"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.19" bottomOffset="0.19" presetHandlers="12"/> - </img> - <img src="JO6IblecQoppuTxxuwXcfOq0nud" width="162" height="132" topLeftX="361" topLeftY="328"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.19" bottomOffset="0.19" presetHandlers="12"/> - </img> - <img src="GTYhbABKHoXRG5xHeVMcgw2EnUg" width="338" height="236" topLeftX="361" topLeftY="80"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.16" bottomOffset="0.16" presetHandlers="12"/> - </img> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">04 | 品牌传播创意</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="146" topLeftX="47" topLeftY="112" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">演示文稿是实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中内容,可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="266" height="61" topLeftX="43" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="30">平面风格</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Iyjybbnc2oSPDbxsyOUcD72Fnob" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="188" height="384" topLeftX="328" topLeftY="70" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="188" height="384" topLeftX="526" topLeftY="70" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="188" height="384" topLeftX="721" topLeftY="70" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <img src="LqVhbXxnLoDJIfxjldFccB3snnf" width="172" height="266" topLeftX="338" topLeftY="79" exposure="12" temperature="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.1" bottomOffset="0.1" presetHandlers="12"/> - </img> - <img src="RjVsbnbqNoKY5nxdZBfcFRYqnI3" width="172" height="266" topLeftX="534" topLeftY="79" exposure="19" contrast="-9" saturation="15" temperature="-20"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.1" bottomOffset="0.1" presetHandlers="12"/> - </img> - <img src="AVH7bdQimoVugyxJKgkcENr5nye" width="172" height="266" topLeftX="729" topLeftY="79"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.1" bottomOffset="0.1" presetHandlers="12"/> - </img> - <shape width="240" height="146" topLeftX="47" topLeftY="112" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">演示文稿是实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中内容,可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="272" height="61" topLeftX="43" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="30">短视频</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="34" topLeftX="730" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">04 | 品牌传播创意</span> - </strong> - </p> - </content> - </shape> - <shape width="173" height="74" topLeftX="729" topLeftY="373" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="false"> - <p> - <span fontSize="12" bold="false">输入相关的描述以解释你的标题。输入相关的描述以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="173" height="41" topLeftX="729" topLeftY="344" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span fontSize="14">参考</span> - </strong> - <strong> - <span fontSize="14">三</span> - </strong> - </p> - </content> - </shape> - <shape width="173" height="74" topLeftX="534" topLeftY="373" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="false"> - <p> - <span fontSize="12" bold="false">输入相关的描述以解释你的标题。输入相关的描述以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="173" height="41" topLeftX="534" topLeftY="344" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span fontSize="14">参考</span> - </strong> - <strong> - <span fontSize="14">二</span> - </strong> - </p> - </content> - </shape> - <shape width="173" height="74" topLeftX="338" topLeftY="373" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="false"> - <p> - <span fontSize="12" bold="false">输入相关的描述以解释你的标题。输入相关的描述以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="173" height="41" topLeftX="338" topLeftY="344" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span fontSize="14">参考一</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="YbHYbrBDQoc7xrxu3sJcWWS8n4b" width="654" height="564" topLeftX="260" topLeftY="-24" alpha="0.55"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="399" height="404" topLeftX="289" topLeftY="68" rotation="347" alpha="0.77" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="161" blur="150" color="rgba(79, 196, 147, 0.82)"/> - </shape> - <shape width="399" height="404" topLeftX="289" topLeftY="68" rotation="347" type="ellipse"> - <fill> - <fillColor color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)"/> - </fill> - <border color="linear-gradient(54deg,rgba(222, 255, 241, 0) 0%,rgba(227, 255, 243, 0) 23%,rgba(242, 255, 250, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="49" blur="77" color="rgba(23, 91, 194, 0.44)"/> - </shape> - <shape width="399" height="404" topLeftX="289" topLeftY="68" rotation="347" type="ellipse"> - <fill> - <fillColor color="linear-gradient(336deg,rgba(255, 255, 255, 0) 0%,rgba(255, 255, 255, 0.53) 100%)"/> - </fill> - <shadow offset="200" angle="0" blur="150" color="rgba(79, 196, 147, 0.56)"/> - </shape> - <shape width="202" height="37" topLeftX="730" topLeftY="23" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1.2">品牌传播方案</p> - </content> - </shape> - <shape width="418" height="106" topLeftX="271" topLeftY="217" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(0, 0, 0, 1)" bold="true" underline="false" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="72" underline="false">感谢观看</span> - </strong> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="28" topLeftY="29" iconType="iconpark/Charts/chart-ring.svg"> - <border color="rgba(44, 44, 45, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="196" height="32" topLeftX="46" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(44, 44, 45, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(44, 44, 45, 1)" fontSize="12">LOGO</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--brand_logo_design.xml b/skills/lark-slides/assets/templates/marketing--brand_logo_design.xml deleted file mode 100644 index a34b705c5..000000000 --- a/skills/lark-slides/assets/templates/marketing--brand_logo_design.xml +++ /dev/null @@ -1,1347 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>品牌标志设计 - - - - <headline/> - <sub-headline/> - <body fontColor="#000000FF"/> - <caption fontColor="rgba(155, 157, 160, 1)" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="Nz5gb0JwQoKtbWxj6vScCVdlnDg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="206" height="62" topLeftX="60" topLeftY="413" type="slides-full-round-rect"> - <border color="rgba(0, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="124" height="41" topLeftX="82" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="14">April XX, 2026</span> - </strong> - </p> - </content> - </shape> - <line startX="215" startY="445" endX="245" endY="445"> - <border lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="arrow"/> - </line> - <shape width="157" height="42" topLeftX="60" topLeftY="170" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(203, 205, 208, 1)"> - <p letterSpacing="1"> - <span color="rgba(203, 205, 208, 1)">XX 品牌</span> - </p> - </content> - </shape> - <shape width="454" height="110" topLeftX="46" topLeftY="211" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="60">品牌标志设计</span> - </strong> - </p> - </content> - </shape> - <shape width="132" height="41" topLeftX="85" topLeftY="54" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="false"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="14" bold="false">YOUR LOGO</span> - </p> - </content> - </shape> - <img src="DD33b3w3XovpT9xFZpqco0TynEe" width="12" height="25" topLeftX="60" topLeftY="62" alpha="0.9"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="DD33b3w3XovpT9xFZpqco0TynEe" width="12" height="25" topLeftX="74" topLeftY="62" alpha="0.9"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="124" height="38" topLeftX="787" topLeftY="57" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(0, 0, 0, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12" bold="false">YOUR TEAM</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </style> - <data> - <img src="DYM4b6dzCoMD5gx4sn4cdPYlnxg" width="312" height="402" topLeftX="0" topLeftY="0" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="86" topOffset="0" bottomOffset="186" presetHandlers="0"/> - </img> - <img src="ILOUbaURToeRBCx5VxicLMsKnsb" width="432" height="203" topLeftX="528" topLeftY="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="K8w1bqqEzoTR1bxSqC2cZaQKnmM" width="216" height="337" topLeftX="744" topLeftY="203"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="95" presetHandlers="0"/> - </img> - <shape width="357" height="44" topLeftX="471" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">品牌标志方案二</span> - </p> - </content> - </shape> - <shape width="357" height="44" topLeftX="471" topLeftY="308" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">品牌标志方案一</span> - </p> - </content> - </shape> - <shape width="357" height="44" topLeftX="471" topLeftY="246" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">设计目标</span> - </p> - </content> - </shape> - <shape width="357" height="44" topLeftX="471" topLeftY="181" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">品牌背景</span> - </p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="365" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>04</p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="302" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>03</p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="240" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>02</p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="175" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>01</p> - </content> - </shape> - <shape width="355" height="83" topLeftX="47" topLeftY="163" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="42">目录</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(251, 251, 251, 1)"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="linear-gradient(306deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 26%,rgba(230, 241, 255, 0.1) 63%,rgba(8, 120, 255, 0.11) 100%)"/> - </fill> - </shape> - <img src="CfGzbrtZQogLbGxoQ6NcBVgTnud" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="311" height="291" topLeftX="-10" topLeftY="239" rotation="270" alpha="0.4" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(19, 123, 255, 0) 0%,rgba(173, 230, 253, 0.4) 100%)"/> - </fill> - </shape> - <img src="FW7dbP5C1ol5nXxuNxEcNewknTd" width="210" height="295" topLeftX="250" topLeftY="-43" rotation="90" alpha="0.12"> - <crop type="rect" leftOffset="50" rightOffset="0" topOffset="0" bottomOffset="87" presetHandlers="0"/> - </img> - <img src="I8dFbBRi4o5BJCx4XgycfspKnxI" width="362" height="540" topLeftX="0" topLeftY="0" exposure="12" contrast="-11" saturation="22" temperature="-82"> - <crop type="rect" leftOffset="13" rightOffset="31" topOffset="7" bottomOffset="62" presetHandlers="0"/> - </img> - <shape width="106" height="106" topLeftX="302" topLeftY="105" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="64" height="64" topLeftX="322" topLeftY="126" iconType="iconpark/Abstract/graphic-stitching.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="235" height="77" topLeftX="451" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">品牌背景</span> - </p> - </content> - </shape> - <shape width="332" height="44" topLeftX="453" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">背景一</span> - </strong> - </p> - </content> - </shape> - <shape width="332" height="62" topLeftX="453" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(155, 157, 160, 1)" textAlign="left"> - <p> - <span color="rgba(155, 157, 160, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="332" height="44" topLeftX="453" topLeftY="313" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">背景二</span> - </strong> - </p> - </content> - </shape> - <shape width="332" height="62" topLeftX="453" topLeftY="343" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(155, 157, 160, 1)" textAlign="left"> - <p> - <span color="rgba(155, 157, 160, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(251, 251, 251, 1)"/> - </fill> - </style> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <img src="PT8Vb5020oH4AjxP0hacPvwDnhq" width="540" height="960" topLeftX="455" topLeftY="510" rotation="270" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="249" height="77" topLeftX="47" topLeftY="150" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">设计目标</span> - </p> - </content> - </shape> - <shape width="244" height="83" topLeftX="52" topLeftY="227" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="236" height="44" topLeftX="683" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标二</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="684" topLeftY="207" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="683" topLeftY="91" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="702" topLeftY="110" iconType="iconpark/Charts/chart-proportion.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="236" height="44" topLeftX="683" topLeftY="401" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标四</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="684" topLeftY="434" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="683" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(16, 117, 239, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="702" topLeftY="337" iconType="iconpark/Abstract/triangular-pyramid.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="236" height="44" topLeftX="396" topLeftY="401" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标三</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="397" topLeftY="434" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="396" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="415" topLeftY="337" iconType="iconpark/Operate/color-filter.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <line startX="653" startY="91" endX="653" endY="502"> - <border color="rgba(203, 205, 208, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="370" startY="292" endX="905" endY="292"> - <border color="rgba(203, 205, 208, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="236" height="44" topLeftX="396" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标一</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="397" topLeftY="207" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="396" topLeftY="91" type="ellipse"> - <fill> - <fillColor color="rgba(16, 117, 239, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="415" topLeftY="110" iconType="iconpark/Base/system.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="BsaXbZFhXosMIaxe1q3cwVGinxh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="318" startY="298" endX="642" endY="298"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="879" height="41" topLeftX="40" topLeftY="308" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(78, 86, 102, 1)" textAlign="center"> - <p letterSpacing="1"> - <span color="rgba(78, 86, 102, 1)" fontSize="14">副标题信息</span> - </p> - </content> - </shape> - <shape width="879" height="83" topLeftX="40" topLeftY="210" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="42">品牌标志方案一</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="U9PNbCv3Loi5WNxYxvjclLXmn3e" width="241" height="540" topLeftX="-2" topLeftY="0" flipY="true" exposure="18" contrast="-7" saturation="14" temperature="-69"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="-2" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="21" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="-2" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="21" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="31" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="21" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="GRNXbSx7OoO9Lhx1YEBctcvunKc" width="241" height="540" topLeftX="480" topLeftY="0" rotation="180" exposure="9" temperature="-42"> - <crop type="rect" leftOffset="150" rightOffset="150" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="480" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="503" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="480" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="503" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="513" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="503" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="Jys9bL5AYoTbL7xxuGFcddJvnzz" width="241" height="540" topLeftX="719" topLeftY="0" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="719" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="742" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="719" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="742" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="751" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="742" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="HNMDbk5Afo4U9cx6RFec78s4npm" width="241" height="540" topLeftX="239" topLeftY="0" exposure="20" contrast="5" saturation="11" temperature="-20"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="194" height="56" topLeftX="263" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="195" height="56" topLeftX="262" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="105" topLeftX="239" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="194" height="56" topLeftX="263" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="239" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="262" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="271" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="262" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <shape width="192" height="44" topLeftX="852" topLeftY="717" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="480" height="540" topLeftX="480" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" type="ellipse"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="639" topLeftY="189" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="551" startY="270" endX="889" endY="270"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="720" startY="127" endX="720" endY="413"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="183" height="183" topLeftX="629" topLeftY="179" iconType="iconpark/Abstract/two-ellipses.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(251, 251, 251, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="480" height="540" topLeftX="0" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" type="ellipse"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="158" topLeftY="191" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="70" startY="271" endX="408" endY="271"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="239" startY="128" endX="239" endY="414"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="182" height="182" topLeftX="148" topLeftY="180" iconType="iconpark/Abstract/two-ellipses.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="389" height="56" topLeftX="522" topLeftY="445" rotation="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="389" height="53" topLeftX="45" topLeftY="445" rotation="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(243, 244, 246, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="22">设计方案一</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="V4dIb4GvwoHVZ3xEqMmcvcMfnPc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="303" height="83" topLeftX="52" topLeftY="229" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(251, 251, 251, 1)" textAlign="left"> - <p> - <span color="rgba(251, 251, 251, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="864" height="62" topLeftX="47" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="296" height="263" topLeftX="47" topLeftY="125" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="160" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="160" fontFamily="Arial Black" bold="false">Aa</span> - </p> - </content> - </shape> - <shape width="492" height="51" topLeftX="415" topLeftY="192" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black" bold="false">Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn</span> - </p> - </content> - </shape> - <shape width="492" height="51" topLeftX="415" topLeftY="239" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black" bold="false">1234567890</span> - </p> - </content> - </shape> - <shape width="492" height="51" topLeftX="415" topLeftY="286" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black">(<!</span> - </strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black" bold="false">#$&?]}</span> - </p> - </content> - </shape> - <line startX="355" startY="191" endX="355" endY="338"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="146" height="146" topLeftX="717" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(134, 219, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">25%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#86DBFF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="717" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(198, 231, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="28">5%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#C6E7FF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" color="rgba(251, 251, 251, 1)" bold="true"> - <p> - <strong> - <span color="rgba(251, 251, 251, 1)" fontSize="30">60%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#1C66F6</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">10%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#000000</span> - </strong> - </p> - </content> - </shape> - <shape width="249" height="77" topLeftX="47" topLeftY="150" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">色彩方案</span> - </p> - </content> - </shape> - <shape width="360" height="104" topLeftX="52" topLeftY="227" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="W9b6bRk6xoEMZJxK9SicuaaLnKp" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="318" startY="298" endX="642" endY="298"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="879" height="41" topLeftX="40" topLeftY="308" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(78, 86, 102, 1)" textAlign="center"> - <p letterSpacing="1"> - <span color="rgba(78, 86, 102, 1)" fontSize="14">副标题信息</span> - </p> - </content> - </shape> - <shape width="879" height="83" topLeftX="40" topLeftY="210" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="42">品牌标志方案二</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="KXVybTHCGoY3Gjxsnb5clEdbnud" width="241" height="540" topLeftX="0" topLeftY="0" exposure="18" temperature="-100"> - <crop type="rect" leftOffset="15" rightOffset="26" topOffset="23" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="0" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="23" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="0" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="23" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="33" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="23" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="AyzzbZ5KUoncRaxxMwecWRHAnOd" width="241" height="540" topLeftX="480" topLeftY="0" exposure="-7" contrast="-12" saturation="15" temperature="-16"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="480" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="503" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="480" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="503" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="513" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="503" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="EiPVblC7pomjKlxdqo1cXl89nBg" width="241" height="540" topLeftX="239" topLeftY="0" rotation="180" flipX="true" flipY="true" saturation="-22"> - <crop type="rect" leftOffset="31" rightOffset="31" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="194" height="56" topLeftX="262" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="195" height="56" topLeftX="262" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="105" topLeftX="239" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="194" height="56" topLeftX="263" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="239" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="262" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="271" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="262" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="G3sIb7p4Qounv7xEwkMcuqfRnid" width="241" height="540" topLeftX="719" topLeftY="0" rotation="180" exposure="38" contrast="-8" saturation="9" temperature="-80"> - <crop type="rect" leftOffset="31" rightOffset="31" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="719" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="742" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="719" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="742" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="751" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="742" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="480" height="540" topLeftX="480" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" type="ellipse"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="639" topLeftY="189" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="551" startY="270" endX="889" endY="270"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="720" startY="127" endX="720" endY="413"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="183" height="183" topLeftX="629" topLeftY="179" iconType="iconpark/Abstract/api-app.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(251, 251, 251, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="480" height="540" topLeftX="0" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" type="ellipse"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="158" topLeftY="191" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="70" startY="271" endX="408" endY="271"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="239" startY="128" endX="239" endY="414"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="182" height="182" topLeftX="148" topLeftY="180" iconType="iconpark/Abstract/api-app.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="389" height="56" topLeftX="522" topLeftY="445" rotation="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="389" height="53" topLeftX="45" topLeftY="445" rotation="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(243, 244, 246, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="22">设计方案二</span> - </p> - </content> - </shape> - <shape width="132" height="41" topLeftX="85" topLeftY="54" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14" bold="false">YOUR LOGO</span> - </p> - </content> - </shape> - <img src="KQ6ubZ4VJoHxRSxjPGecHsdHnNb" width="12" height="25" topLeftX="60" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Zte9b4vHRo6CjpxVGRvceHwtnWf" width="12" height="25" topLeftX="74" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="124" height="38" topLeftX="787" topLeftY="57" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(251, 251, 251, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(251, 251, 251, 1)" fontSize="12" bold="false">YOUR TEAM</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="864" height="62" topLeftX="47" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="296" height="263" topLeftX="47" topLeftY="125" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="160" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <span color="rgba(43, 47, 54, 1)" fontSize="160" fontFamily="Trebuchet MS" bold="false">Aa</span> - </p> - </content> - </shape> - <shape width="407" height="51" topLeftX="506" topLeftY="192" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS" bold="false">Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn</span> - </p> - </content> - </shape> - <shape width="407" height="51" topLeftX="506" topLeftY="239" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS" bold="false">1234567890</span> - </p> - </content> - </shape> - <shape width="407" height="51" topLeftX="506" topLeftY="286" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS">(<!</span> - </strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS" bold="false">#$&?]}</span> - </p> - </content> - </shape> - <line startX="374" startY="197" endX="374" endY="343"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="146" height="146" topLeftX="717" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(41, 185, 246, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">25%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#86DBFF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="717" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(225, 234, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="28">5%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#C6E7FF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(0, 145, 227, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" color="rgba(251, 251, 251, 1)" bold="true"> - <p> - <strong> - <span color="rgba(251, 251, 251, 1)" fontSize="30">60%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#1C66F6</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">10%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#000000</span> - </strong> - </p> - </content> - </shape> - <shape width="360" height="77" topLeftX="47" topLeftY="150" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">色彩方案</span> - </p> - </content> - </shape> - <shape width="360" height="104" topLeftX="52" topLeftY="227" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WsnNbo3j8oXqnWxynaZcVz6knrd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="132" height="41" topLeftX="85" topLeftY="54" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14" bold="false">YOUR LOGO</span> - </p> - </content> - </shape> - <img src="CCJxbunFoosXKRxZiSwcrHKNnXe" width="12" height="25" topLeftX="60" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Um3Qb2dr1of3Swxw73Ec5hGlnyb" width="12" height="25" topLeftX="74" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="124" height="38" topLeftX="787" topLeftY="57" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(251, 251, 251, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(251, 251, 251, 1)" fontSize="12" bold="false">YOUR TEAM</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--brand_operations_plan.xml b/skills/lark-slides/assets/templates/marketing--brand_operations_plan.xml deleted file mode 100644 index 57e8cf3e1..000000000 --- a/skills/lark-slides/assets/templates/marketing--brand_operations_plan.xml +++ /dev/null @@ -1,1309 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>品牌运营计划-裂图重新上传 - - - - <headline fontColor="rgba(43, 47, 54, 1)" fontSize="48"/> - <sub-headline fontColor="rgba(43, 47, 54, 1)"/> - <body fontColor="rgba(43, 47, 54, 1)" fontSize="14"/> - <caption fontColor="rgba(43, 47, 54, 1)"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <shape width="542" height="116" topLeftX="26" topLeftY="375" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">品牌提案</span> - </p> - </content> - </shape> - <shape width="464" height="62" topLeftX="33" topLeftY="326" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">Brand proposal</span> - </p> - </content> - </shape> - <img src="XLyZb9phHo2eqMxA4TFcsriAnYg" width="459" height="464" topLeftX="501" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="22" topOffset="160" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="73" height="38" topLeftX="59" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="40" topLeftY="31" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </style> - <data> - <shape width="175" height="92" topLeftX="54" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)">目录</span> - </p> - </content> - </shape> - <shape width="175" height="68" topLeftX="60" topLeftY="165" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">Contents</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="113" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(60, 111, 229, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 111, 229, 1)" fontSize="20">01</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="113" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(60, 111, 229, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 111, 229, 1)" fontSize="20">品牌介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="170" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">02</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="170" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">产品介绍</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">03</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">市场分析</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="282" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">04</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="282" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">活动思路</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="338" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">05</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="338" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">营销推广</span> - </p> - </content> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="123" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="179" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="235" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="291" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="347" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="163" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">01</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="31">品牌介绍</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Brand Story</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="225" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p> - <span color="rgba(60, 111, 229, 1)">品牌故事</span> - </p> - </content> - </shape> - <img src="Ob67bcca3obkWzxh5LtcdaEYnQh" width="248" height="361" topLeftX="350" topLeftY="89"> - <crop type="rect" leftOffset="0" rightOffset="347" topOffset="127" bottomOffset="107" presetHandlers="0"/> - </img> - <img src="GsGwbhbE0oRA2pxH46BcHtBZnOp" width="225" height="361" topLeftX="610" topLeftY="89"> - <crop type="rect" leftOffset="270" rightOffset="100" topOffset="128" bottomOffset="106" presetHandlers="0"/> - </img> - <img src="GYwAbOu11ofIfYxkiSlcX00bnvl" width="93" height="361" topLeftX="848" topLeftY="89"> - <crop type="rect" leftOffset="502" rightOffset="0" topOffset="128" bottomOffset="105" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Milestone</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="246" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>发展回顾</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="164" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">02</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>产品介绍</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Product Line</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="246" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>产品线</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="248" height="371" topLeftX="619" topLeftY="78" type="rect"> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="248" height="371" topLeftX="351" topLeftY="79" type="rect"> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Highlights</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="246" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>产品亮点</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="644" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">亮点 </span> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">#2</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="92" topLeftX="644" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="649" topLeftY="115" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="669" topLeftY="135" iconType="iconpark/Abstract/cylinder.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="41" topLeftX="370" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">亮点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="92" topLeftX="370" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="375" topLeftY="115" type="ellipse"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <icon width="32" height="32" topLeftX="395" topLeftY="135" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="205" height="74" topLeftX="370" topLeftY="332" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" textAlign="left"> - <ul> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="205" height="74" topLeftX="644" topLeftY="332" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" textAlign="left"> - <ul> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - </ul> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="163" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">03</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>市场分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Market Environment</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>市场环境</p> - </content> - </shape> - <shape width="310" height="310" topLeftX="334" topLeftY="110" type="ellipse"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="310" height="310" topLeftX="605" topLeftY="111" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="180" height="44" topLeftX="387" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">国内市场</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="92" topLeftX="387" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="657" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">国际市场</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="92" topLeftX="657" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Consumer Group</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>消费人群</p> - </content> - </shape> - <shape width="79" height="32" topLeftX="415" topLeftY="257" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">18</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="32" topLeftX="415" topLeftY="289" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">18-25</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="32" topLeftX="414" topLeftY="321" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">25-35</span> - </strong> - </p> - </content> - </shape> - <shape width="79" height="32" topLeftX="414" topLeftY="351" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">35 以上</span> - </strong> - </p> - </content> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="267" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="188" height="12" topLeftX="513" topLeftY="267" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="299" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="92" height="12" topLeftX="513" topLeftY="299" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="331" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="256" height="12" topLeftX="513" topLeftY="331" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="361" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="188" height="12" topLeftX="513" topLeftY="361" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="38" height="32" topLeftX="513" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">0</span> - </p> - </content> - </shape> - <shape width="38" height="32" topLeftX="603" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">10</span> - </p> - </content> - </shape> - <shape width="38" height="32" topLeftX="693" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">20</span> - </p> - </content> - </shape> - <shape width="38" height="32" topLeftX="782" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">30</span> - </p> - </content> - </shape> - <shape width="386" height="74" topLeftX="448" topLeftY="141" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="448" topLeftY="107" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)">洞察分析</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Competition Analysis</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="269" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>竞对分析</p> - </content> - </shape> - <shape width="146" height="146" topLeftX="559" topLeftY="79" type="ellipse"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="20">竞品 #1</span> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="559" topLeftY="194" type="ellipse"> - <fill> - <fillColor/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20"> - <p> - <span fontSize="20">竞品 #2</span> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="559" topLeftY="315" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="20">竞品 #3</span> - </p> - </content> - </shape> - <shape width="146" height="41" topLeftX="374" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p> - <strong>优势</strong> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="374" topLeftY="120" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="374" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="374" topLeftY="354" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="41" topLeftX="745" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>劣势</p> - </content> - </shape> - <shape width="146" height="74" topLeftX="745" topLeftY="120" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="745" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="745" topLeftY="354" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <line startX="352" startY="208" endX="542" endY="208"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="352" startY="332" endX="542" endY="332"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="722" startY="208" endX="913" endY="208"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="722" startY="331" endX="913" endY="331"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="164" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">04</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>活动思路</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p> Activity Ideas</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>活动思路</p> - </content> - </shape> - <img src="CZOnbA1troRlwZxlAtPcPnZynJh" width="244" height="150" topLeftX="366" topLeftY="120"> - <crop type="rect" leftOffset="46" rightOffset="0" topOffset="64" bottomOffset="77" presetHandlers="0"/> - </img> - <img src="Dwj0bfLj6oNOvfxDDTPcXP38nQg" width="244" height="158" topLeftX="649" topLeftY="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="29" bottomOffset="57" presetHandlers="0"/> - </img> - <shape width="261" height="74" topLeftX="641" topLeftY="175" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="641" topLeftY="141" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true"> - <p>促销活动</p> - </content> - </shape> - <shape width="261" height="74" topLeftX="358" topLeftY="329" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="358" topLeftY="294" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true"> - <p> 试用活动</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="164" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">05</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>营销推广</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p> Activity Ideas</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="270" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>活动思路</p> - </content> - </shape> - <shape width="563" height="132" topLeftX="335" topLeftY="205" type="slides-full-round-rect"> - <border color="rgba(60, 111, 229, 1)" width="24" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="191" height="200" topLeftX="321" topLeftY="259" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="119" height="282" topLeftX="304" topLeftY="98" flipX="true" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="78" height="78" topLeftX="365" topLeftY="168" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="78" topLeftX="568" topLeftY="168" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="180" height="41" topLeftX="570" topLeftY="67" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>主视觉设计</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="570" topLeftY="101" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="365" topLeftY="67" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>产品定位</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="365" topLeftY="101" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="478" topLeftY="383" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>营销活动</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="478" topLeftY="417" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="478" topLeftY="297" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="78" topLeftX="678" topLeftY="297" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="180" height="41" topLeftX="678" topLeftY="383" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>广告投放</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="678" topLeftY="417" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <icon width="42" height="42" topLeftX="383" topLeftY="187" iconType="iconpark/Base/home.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="42" height="42" topLeftX="586" topLeftY="187" iconType="iconpark/Base/pic.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="42" height="42" topLeftX="696" topLeftY="317" iconType="iconpark/Office/envelope-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="42" height="42" topLeftX="496" topLeftY="317" iconType="iconpark/Office/newspaper-folding.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p> Activity Ideas</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="267" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>活动思路</p> - </content> - </shape> - <line startX="362" startY="440" endX="362" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="536" startY="440" endX="535" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="722" startY="440" endX="722" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="895" startY="440" endX="895" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="399" height="48" topLeftX="495" topLeftY="191" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">事项 #1</span> - </p> - </content> - </shape> - <shape width="337" height="48" topLeftX="450" topLeftY="252" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">事项 #2</span> - </p> - </content> - </shape> - <shape width="400" height="48" topLeftX="362" topLeftY="313" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">事项 #3</span> - </p> - </content> - </shape> - <shape width="267" height="48" topLeftX="583" topLeftY="373" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p>事项 #4</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="362" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>前期筹备</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="538" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>执行期</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="715" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>总结复盘</p> - </content> - </shape> - <line startX="362" startY="136" endX="895" endY="136"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="solid-triangle"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <shape width="542" height="116" topLeftX="26" topLeftY="375" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">感谢观看</span> - </p> - </content> - </shape> - <shape width="464" height="62" topLeftX="33" topLeftY="326" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">Thank You</span> - </p> - </content> - </shape> - <img src="CaPpbVUruoFDoBxsOS2cpAOFnBe" width="459" height="464" topLeftX="501" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="22" topOffset="160" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="73" height="38" topLeftX="59" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="40" topLeftY="31" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--business_plan.xml b/skills/lark-slides/assets/templates/marketing--business_plan.xml deleted file mode 100644 index aa3ed710b..000000000 --- a/skills/lark-slides/assets/templates/marketing--business_plan.xml +++ /dev/null @@ -1,1646 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>商业计划书 - - - - <headline fontColor="#000000FF" fontSize="36"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="540" height="540" topLeftX="690" topLeftY="0" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="120" height="120" topLeftX="900" topLeftY="210" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="608" height="146" topLeftX="36" topLeftY="171" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="90" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="90">商业计划书</span> - </strong> - </p> - </content> - </shape> - <shape width="360" height="62" topLeftX="36" topLeftY="306" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="36" topLeftY="41" rotation="90" iconType="iconpark/Abstract/game-emoji.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </icon> - <shape width="450" height="34" topLeftX="61" topLeftY="36" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)">公司名字</span> - </p> - </content> - </shape> - </data> - <note> - <content> - <p/> - </content> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="540" height="540" topLeftX="-270" topLeftY="0" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="496" height="69" topLeftX="353" topLeftY="91" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(31, 35, 41, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="linear-gradient(180deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)">目录 </span> - <span color="rgba(31, 35, 41, 1)">CONTENT</span> - </p> - </content> - </shape> - <shape width="208" height="44" topLeftX="412" topLeftY="196" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">项目介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="208" height="41" topLeftX="412" topLeftY="227" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">一句简单的标题说明</span> - </p> - </content> - </shape> - <icon width="40" height="40" topLeftX="362" topLeftY="211" iconType="iconpark/Charts/slide-two.svg"> - <border color="rgba(43, 47, 54, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="208" height="44" topLeftX="691" topLeftY="196" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">产品服务</span> - </strong> - </p> - </content> - </shape> - <shape width="208" height="41" topLeftX="691" topLeftY="227" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">一句简单的标题说明</span> - </p> - </content> - </shape> - <icon width="40" height="40" topLeftX="641" topLeftY="211" iconType="iconpark/Abstract/ad-product.svg"> - <border color="rgba(43, 47, 54, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="208" height="44" topLeftX="412" topLeftY="282" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">财务计划</span> - </strong> - </p> - </content> - </shape> - <shape width="208" height="41" topLeftX="412" topLeftY="314" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">一句简单的标题说明</span> - </p> - </content> - </shape> - <icon width="40" height="40" topLeftX="362" topLeftY="298" iconType="iconpark/Charts/chart-histogram.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="208" height="44" topLeftX="691" topLeftY="282" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">商业模式</span> - </strong> - </p> - </content> - </shape> - <shape width="208" height="41" topLeftX="691" topLeftY="314" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">一句简单的标题说明</span> - </p> - </content> - </shape> - <icon width="40" height="40" topLeftX="641" topLeftY="298" iconType="iconpark/Money/mall-bag.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="208" height="44" topLeftX="412" topLeftY="380" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">市场分析</span> - </strong> - </p> - </content> - </shape> - <shape width="208" height="41" topLeftX="412" topLeftY="412" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">一句简单的标题说明</span> - </p> - </content> - </shape> - <icon width="40" height="40" topLeftX="362" topLeftY="396" iconType="iconpark/Money/optional.svg"> - <border color="rgba(43, 47, 54, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="98" height="70" topLeftX="353" topLeftY="91" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="undefined" color="linear-gradient(180deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"/> - </shape> - <shape width="294" height="69" topLeftX="434" topLeftY="91" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.35" autoFit="shape-auto-fit"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <img src="NKYqbbqjqoGoqwxkX8ocmnORnWe" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.35"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="30" bottomOffset="30"/> - </img> - <shape width="729" height="44" topLeftX="115" topLeftY="291" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="272" topLeftY="232" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">01 项目介绍</span> - </strong> - </p> - </content> - </shape> - <icon width="72" height="72" topLeftX="444" topLeftY="158" iconType="iconpark/Charts/slide-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="182" height="175" topLeftX="425" topLeftY="346" alpha="0.4" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <img src="BkDXbuLNNoclghxZ5IocqY7knhb" width="400" height="400" topLeftX="475" topLeftY="97" exposure="20" contrast="3" saturation="22" temperature="-84"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.06" bottomOffset="0.06" presetHandlers="396"/> - </img> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">项目概述</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="right"> - <p> - <strong> - <span fontSize="14">01 项目介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="418" height="209" topLeftX="31" topLeftY="190" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">请在此处输入项目概述内容,用一句话来清晰地描述你的商业模式,即你的产品或服务;用一句话来明确表述为什么你的创新及时解决了用户的问题, 填补了市场的空缺;用一句话(包括具体数字)来描述巨大的市场规模和潜在的远景;用一句话来概括你的竞争优势;</span> - </p> - <p/> - <p> - <span fontSize="14">用一句话(包括具体数字)来描述巨大的市场规模和潜在的远景;用一句话来概括你的竞争优势;用一句话(包括具体数字)来描述巨大的市场规模和潜在的远景;用一句话来概括你的竞争优势;</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="31" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="36">输入你的标题</span> - </strong> - </p> - </content> - </shape> - <shape width="114" height="110" topLeftX="773" topLeftY="88" type="ellipse"> - <border color="rgba(25, 76, 255, 1)" width="30" lineJoin="miter" miterLimit="10"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="392" height="392" topLeftX="764" topLeftY="74" alpha="0.2" type="ellipse"> - <border color="rgba(208, 211, 214, 1)" width="150" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="227" height="41" topLeftX="188" topLeftY="164" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">团队成员相关信息介绍</span> - </p> - </content> - </shape> - <shape width="227" height="44" topLeftX="188" topLeftY="136" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">团队成员 #1</span> - </strong> - </p> - </content> - </shape> - <img src="WQkNbLxhFo8JjBxKyOLcq1QCn5d" width="80" height="80" topLeftX="104" topLeftY="128"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="40"/> - </img> - <shape width="418" height="209" topLeftX="465" topLeftY="200" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">请在此处输入项目概述内容,用一句话来清晰地描述你的商业模式,即你的产品或服务;用一句话来明确表述为什么你的创新及时解决了用户的问题, 填补了市场的空缺;用一句话(包括具体数字)来描述巨大的市场规模和潜在的远景;用一句话来概括你的竞争优势;</span> - </p> - <p/> - <p> - <span fontSize="14">用一句话(包括具体数字)来描述巨大的市场规模和潜在的远景;用一句话来概括你的竞争优势;用一句话(包括具体数字)来描述巨大的市场规模和潜在的远景;用一句话来概括你的竞争优势;</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="465" topLeftY="128" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="36">市场团队成员</span> - </strong> - </p> - </content> - </shape> - <img src="FG6ebbrxQoQ3A0xoIMvcFwCynab" width="80" height="80" topLeftX="104" topLeftY="246"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="40"/> - </img> - <shape width="227" height="41" topLeftX="188" topLeftY="282" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">团队成员相关信息介绍</span> - </p> - </content> - </shape> - <shape width="227" height="44" topLeftX="188" topLeftY="254" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">团队成员 #2</span> - </strong> - </p> - </content> - </shape> - <img src="ZWpTb71pOoURwPxXsqvcWwDcnCc" width="80" height="80" topLeftX="104" topLeftY="367"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="40"/> - </img> - <shape width="227" height="41" topLeftX="188" topLeftY="403" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">团队成员相关信息介绍</span> - </p> - </content> - </shape> - <shape width="227" height="44" topLeftX="188" topLeftY="375" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">团队成员 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="left"> - <p>团队介绍</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="right"> - <p>01 项目介绍</p> - </content> - </shape> - <shape width="54" height="54" topLeftX="62" topLeftY="419" type="ellipse"> - <border color="rgba(25, 76, 255, 1)" width="16" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="34" height="33" topLeftX="92" topLeftY="113" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <img src="L9V8bWX5doWx99x9Rmbc9br6nyc" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.35"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="30" bottomOffset="30"/> - </img> - <shape width="729" height="44" topLeftX="115" topLeftY="291" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="272" topLeftY="232" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p lineSpacing="multiple:1.35"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">02 市场分析</span> - </strong> - </p> - </content> - </shape> - <icon width="72" height="72" topLeftX="444" topLeftY="158" iconType="iconpark/Money/optional.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="441" height="441" topLeftX="93" topLeftY="69" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="441" height="441" topLeftX="444" topLeftY="69" alpha="0.92" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="93" height="89" topLeftX="75" topLeftY="412" type="ellipse"> - <border color="rgba(25, 76, 255, 1)" width="34" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="72" height="69" topLeftX="814" topLeftY="115" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="267" height="41" topLeftX="665" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">02 市场分析</span> - </strong> - </p> - </content> - </shape> - <shape width="267" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">市场概述</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="125" topLeftX="545" topLeftY="270" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">请在此处输入项目概述内容,用一句话来清晰地描述你的商业模式,即你的产品或服务;用一句话来明确表述为什么你的创新及时解决了用户的问题, 填补了市场的空缺;</span> - </p> - </content> - </shape> - <shape width="416" height="53" topLeftX="457" topLeftY="218" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">国际市场</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="125" topLeftX="194" topLeftY="270" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="center"> - <p> - <span fontSize="14">请在此处输入项目概述内容,用一句话来清晰地描述你的商业模式,即你的产品或服务;用一句话来明确表述为什么你的创新及时解决了用户的问题, 填补了市场的空缺;</span> - </p> - </content> - </shape> - <shape width="416" height="53" topLeftX="106" topLeftY="218" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span fontSize="24">国内市场</span> - </strong> - </p> - </content> - </shape> - <icon width="60" height="60" topLeftX="635" topLeftY="160" iconType="iconpark/Travel/earth.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="284" topLeftY="160" iconType="iconpark/Travel/local-two.svg"> - <border color="rgba(43, 47, 54, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="306" height="306" topLeftX="326" topLeftY="157" alpha="0.1" type="ellipse"> - <border color="rgba(143, 149, 158, 1)" width="39" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong>行业分析</strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="right"> - <p> - <strong> - <span fontSize="14">02 市场分析</span> - </strong> - </p> - </content> - </shape> - <shape width="108" height="108" topLeftX="426" topLeftY="98" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> 新进入者的威胁</span> - </strong> - </p> - </content> - </shape> - <shape width="108" height="108" topLeftX="270" topLeftY="215" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">购买者的议价能力 </span> - </strong> - </p> - </content> - </shape> - <shape width="108" height="108" topLeftX="329" topLeftY="389" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">供应商的议价能力 </span> - </strong> - </p> - </content> - </shape> - <shape width="108" height="108" topLeftX="582" topLeftY="215" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> 同业竞争者的竞争程度</span> - </strong> - </p> - </content> - </shape> - <shape width="108" height="108" topLeftX="522" topLeftY="389" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> 替代品的威胁</span> - </strong> - </p> - </content> - </shape> - <shape width="193" height="193" topLeftX="383" topLeftY="214" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="250" height="67" topLeftX="363" topLeftY="32" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <span fontSize="12">新进入者在给行业带来新生产能力、新资源的同时,将希望在已被现有企业瓜分完毕的市场中赢得一席之地</span> - </p> - </content> - </shape> - <shape width="250" height="63" topLeftX="700" topLeftY="235" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <span fontSize="12">现有企业之间的竞争常常表现在价格、广告、产品介绍、售后服务等方面,其竞争强度与许多因素有关。</span> - </p> - </content> - </shape> - <shape width="250" height="63" topLeftX="646" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <span fontSize="12">两个处于不同行业中的企业,可能会由于所生产的产品是互为替代品,从而在它们之间产生相互竞争行为</span> - </p> - </content> - </shape> - <shape width="250" height="63" topLeftX="9" topLeftY="235" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:1.2" textAlign="right"> - <p lineSpacing="multiple:1.2"> - <span fontSize="12">购买者主要通过其压价与要求提供较高的产品或服务质量的能力,来影响行业中现有企业的盈利能力。</span> - </p> - </content> - </shape> - <shape width="250" height="63" topLeftX="63" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:1.2" textAlign="right"> - <p lineSpacing="multiple:1.2"> - <span fontSize="12">供方主要通过其提高投入要素价格与降低单位价值质量的能力,来影响行业中现有企业的盈利能力与产品竞争力。</span> - </p> - </content> - </shape> - <shape width="159" height="38" topLeftX="401" topLeftY="306" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">Porter's Five Forces</span> - </p> - </content> - </shape> - <shape width="193" height="50" topLeftX="383" topLeftY="276" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">波特五力分析</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <img src="NEpLb1Jjko0kZZxZY4hcfAYRn9g" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.35"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="30" bottomOffset="30"/> - </img> - <shape width="729" height="44" topLeftX="115" topLeftY="291" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="272" topLeftY="232" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">03 产品服务</span> - </strong> - </p> - </content> - </shape> - <icon width="72" height="72" topLeftX="444" topLeftY="158" iconType="iconpark/Abstract/ad-product.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="356" height="356" topLeftX="483" topLeftY="92" alpha="0.2" type="ellipse"> - <border color="rgba(208, 211, 214, 1)" width="42" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="94" height="94" topLeftX="545" topLeftY="223" rotation="315" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="187" height="187" topLeftX="432" topLeftY="176" rotation="315" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="94" height="94" topLeftX="614" topLeftY="155" rotation="45" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="187" height="187" topLeftX="567" topLeftY="41" rotation="45" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="94" height="94" topLeftX="683" topLeftY="223" rotation="135" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="187" height="187" topLeftX="702" topLeftY="176" rotation="135" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="94" height="94" topLeftX="614" topLeftY="292" rotation="225" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="187" height="187" topLeftX="567" topLeftY="311" rotation="225" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p lineSpacing="multiple:1"> - <strong> - <span fontSize="14">产品分析</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="right"> - <p> - <strong> - <span fontSize="14">03 产品服务</span> - </strong> - </p> - </content> - </shape> - <shape width="333" height="167" topLeftX="31" topLeftY="190" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">4Ps 理论产生于20世纪60年代的美国,随着营销组合理论的提出而出现的。1953年,尼尔·博登(Neil Borden)在美国市场营销学会的就职演说中创造了“市场营销组合”(Marketing mix)</span> - </p> - <p/> - <p> - <span fontSize="14">这一术语,其意是指市场需求或多或少的在某种程度上受到所谓“营销变量”或“营销要素”的影响。</span> - </p> - </content> - </shape> - <shape width="416" height="67" topLeftX="31" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.3"> - <strong> - <span fontSize="36">4Ps 分析</span> - </strong> - </p> - </content> - </shape> - <shape width="179" height="47" topLeftX="439" topLeftY="204" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">价格</span> - </p> - </content> - </shape> - <shape width="179" height="92" topLeftX="439" topLeftY="239" alpha="0.75" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">新进入者在给行业带来新生产能力、新资源的同时,将希望在已被现有企业瓜分完毕的市场中赢得一席之地</span> - </p> - </content> - </shape> - <shape width="179" height="47" topLeftX="571" topLeftY="336" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">渠道</span> - </p> - </content> - </shape> - <shape width="179" height="92" topLeftX="571" topLeftY="371" alpha="0.75" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">两个处于不同行业中的企业,可能会由于所生产的产品是互为替代品,从而在它们之间产生相互竞争行为</span> - </p> - </content> - </shape> - <shape width="179" height="47" topLeftX="704" topLeftY="203" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">宣传</span> - </p> - </content> - </shape> - <shape width="179" height="92" topLeftX="704" topLeftY="239" alpha="0.75" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">供方主要通过其提高投入要素价格与降低单位价值质量的能力,来影响行业中现有企业的盈利能力与产品竞争力。</span> - </p> - </content> - </shape> - <shape width="179" height="47" topLeftX="571" topLeftY="62" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">产品</span> - </p> - </content> - </shape> - <shape width="179" height="92" topLeftX="571" topLeftY="98" alpha="0.75" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">购买者主要通过其压价与要求提供较高的产品或服务质量的能力,来影响行业中现有企业的盈利能力。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="left"> - <p> - <strong> - <span fontSize="14">营销方式</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="right"> - <p> - <strong> - <span fontSize="14">03 产品服务</span> - </strong> - </p> - </content> - </shape> - <shape width="290" height="180" topLeftX="31" topLeftY="110" presetHandlers="16" alpha="0.25" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="260" height="44" topLeftX="37" topLeftY="184" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">营销手段 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="54" height="54" topLeftX="49" topLeftY="128" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="61" topLeftY="140" iconType="iconpark/Music/play.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="260" height="62" topLeftX="37" topLeftY="214" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="290" height="180" topLeftX="337" topLeftY="110" presetHandlers="16" alpha="0.25" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="260" height="44" topLeftX="343" topLeftY="184" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">营销手段 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="54" height="54" topLeftX="355" topLeftY="128" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="260" height="62" topLeftX="343" topLeftY="214" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <icon width="30" height="30" topLeftX="367" topLeftY="140" iconType="iconpark/Travel/international.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="290" height="180" topLeftX="643" topLeftY="110" presetHandlers="16" alpha="0.25" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="260" height="44" topLeftX="649" topLeftY="184" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">营销手段 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="54" height="54" topLeftX="661" topLeftY="128" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="260" height="62" topLeftX="649" topLeftY="214" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <icon width="30" height="30" topLeftX="673" topLeftY="140" iconType="iconpark/Office/envelope-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="290" height="180" topLeftX="643" topLeftY="305" presetHandlers="16" alpha="0.25" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="260" height="44" topLeftX="649" topLeftY="378" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">营销手段 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="54" height="54" topLeftX="661" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="260" height="62" topLeftX="649" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <icon width="30" height="30" topLeftX="673" topLeftY="335" iconType="iconpark/Hardware/broadcast-radio.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="290" height="180" topLeftX="337" topLeftY="305" presetHandlers="16" alpha="0.25" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="260" height="44" topLeftX="343" topLeftY="378" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">营销手段 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="54" height="54" topLeftX="355" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="260" height="62" topLeftX="343" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <icon width="30" height="30" topLeftX="367" topLeftY="335" iconType="iconpark/Office/announcement.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="290" height="180" topLeftX="31" topLeftY="305" presetHandlers="16" alpha="0.25" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="260" height="44" topLeftX="37" topLeftY="378" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">营销手段 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="54" height="54" topLeftX="49" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="260" height="62" topLeftX="37" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <icon width="30" height="30" topLeftX="61" topLeftY="335" iconType="iconpark/Hardware/iphone.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="left"> - <p>竞对分析</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="right"> - <p>03 产品服务</p> - </content> - </shape> - <shape width="352" height="62" topLeftX="581" topLeftY="131" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="352" height="44" topLeftX="581" topLeftY="103" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">竞争对手 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="352" height="62" topLeftX="581" topLeftY="255" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="352" height="44" topLeftX="581" topLeftY="228" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">竞争对手 #</span> - </strong> - <strong> - <span fontSize="16">2</span> - </strong> - </p> - </content> - </shape> - <shape width="352" height="62" topLeftX="581" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="352" height="44" topLeftX="581" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">竞争对手 #</span> - </strong> - <strong> - <span fontSize="16">3</span> - </strong> - </p> - </content> - </shape> - <shape width="352" height="104" topLeftX="31" topLeftY="145" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="404" height="64" topLeftX="31" topLeftY="92" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.3"> - <strong> - <span fontSize="32">竞争对手策略</span> - </strong> - </p> - </content> - </shape> - <shape width="165" height="159" topLeftX="324" topLeftY="263" alpha="0.25" type="ellipse"> - <border color="rgba(222, 224, 227, 1)" width="30" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="IVyNbubw7o8DXzxtwcNcC9ktnLg" width="241" height="241" topLeftX="145" topLeftY="277" flipX="true" exposure="14" saturation="39" temperature="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.03" bottomOffset="0.03" presetHandlers="236"/> - </img> - <shape width="97" height="93" topLeftX="79" topLeftY="417" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <img src="Z2MmbbC1uoDQd3xIYhxcoiVnnwc" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.35"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="30" bottomOffset="30"/> - </img> - <shape width="729" height="44" topLeftX="115" topLeftY="291" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="272" topLeftY="232" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">04 商业模式</span> - </strong> - </p> - </content> - </shape> - <icon width="72" height="72" topLeftX="444" topLeftY="158" iconType="iconpark/Money/mall-bag.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="267" height="41" topLeftX="665" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">04 商业模式</span> - </strong> - </p> - </content> - </shape> - <shape width="267" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">营销策略</span> - </strong> - </p> - </content> - </shape> - <shape width="838" height="28" topLeftX="49" topLeftY="289" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(37, 216, 255, 1) 0%,rgba(37, 216, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="12" height="12" topLeftX="83" topLeftY="297" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="247" startY="313" endX="247" endY="396"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="89" startY="167" endX="89" endY="293"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="12" height="12" topLeftX="398" topLeftY="297" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="550" topLeftY="297" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="703" topLeftY="297" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="556" startY="311" endX="556" endY="397"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="16" height="16" topLeftX="239" topLeftY="295" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="7" height="7" topLeftX="243" topLeftY="300" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <line startX="404" startY="169" endX="404" endY="295"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="709" startY="169" endX="709" endY="295"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="215" height="41" topLeftX="97" topLeftY="156" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">关键点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="215" height="74" topLeftX="97" topLeftY="184" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="215" height="41" topLeftX="412" topLeftY="156" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">关键点 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="215" height="74" topLeftX="412" topLeftY="184" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="215" height="41" topLeftX="718" topLeftY="156" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">关键点 #5</span> - </strong> - </p> - </content> - </shape> - <shape width="215" height="74" topLeftX="718" topLeftY="184" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="215" height="41" topLeftX="253" topLeftY="354" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">关键点 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="215" height="74" topLeftX="253" topLeftY="383" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="215" height="41" topLeftX="564" topLeftY="354" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">关键点 #4</span> - </strong> - </p> - </content> - </shape> - <shape width="215" height="74" topLeftX="564" topLeftY="383" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="1600" height="1600" topLeftX="244" topLeftY="-12" alpha="0.3" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="left"> - <p>发展计划</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="right"> - <p>04 商业模式</p> - </content> - </shape> - <shape width="320" height="104" topLeftX="31" topLeftY="190" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="31" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="36">推进里程碑</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="44" topLeftX="683" topLeftY="52" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">里程碑 # 4</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="62" topLeftX="683" topLeftY="82" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="79" height="79" topLeftX="601" topLeftY="56" rotation="360" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <icon width="48" height="48" topLeftX="617" topLeftY="69" iconType="iconpark/Travel/mountain.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="261" height="44" topLeftX="547" topLeftY="158" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">里程碑 # 3</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="62" topLeftX="547" topLeftY="189" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="79" height="79" topLeftX="465" topLeftY="163" rotation="360" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="261" height="44" topLeftX="436" topLeftY="277" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">里程碑 # 2</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="62" topLeftX="436" topLeftY="308" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="79" height="79" topLeftX="355" topLeftY="281" rotation="360" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="261" height="44" topLeftX="361" topLeftY="411" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">里程碑 # 2</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="62" topLeftX="361" topLeftY="442" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="79" height="79" topLeftX="280" topLeftY="416" rotation="360" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <icon width="48" height="48" topLeftX="480" topLeftY="178" iconType="iconpark/Travel/flag.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="48" height="48" topLeftX="371" topLeftY="296" iconType="iconpark/Travel/tent.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="48" height="48" topLeftX="295" topLeftY="431" iconType="iconpark/Travel/map-draw.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <img src="UdunbEtuPoREO8xF0Bnc91gYn2e" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.35"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="30" bottomOffset="30"/> - </img> - <shape width="729" height="44" topLeftX="115" topLeftY="291" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="272" topLeftY="232" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">05 财务计划</span> - </strong> - </p> - </content> - </shape> - <icon width="72" height="72" topLeftX="444" topLeftY="158" iconType="iconpark/Charts/chart-histogram.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="24" height="24" topLeftX="31" topLeftY="24" type="donut"> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="202" height="41" topLeftX="51" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="left"> - <p>融资计划</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="731" topLeftY="16" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true" textAlign="right"> - <p>04 财务计划</p> - </content> - </shape> - <shape width="279" height="154" topLeftX="344" topLeftY="282" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="220" height="121" topLeftX="374" topLeftY="229" alpha="0.84" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <shape width="157" height="87" topLeftX="405" topLeftY="171" alpha="0.7" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="109" height="60" topLeftX="429" topLeftY="135" alpha="0.88" type="ellipse"> - <fill> - <fillColor color="rgba(25, 76, 255, 1)"/> - </fill> - </shape> - <line startX="346" startY="164" endX="429" endY="164"> - <border color="rgba(25, 76, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="302" startY="289" endX="372" endY="289"> - <border color="rgba(25, 76, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="562" startY="211" endX="629" endY="211"> - <border color="rgba(37, 216, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="623" startY="358" endX="658" endY="358"> - <border color="rgba(37, 216, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="268" height="44" topLeftX="78" topLeftY="142" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="269" height="62" topLeftX="78" topLeftY="170" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="right"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="268" height="44" topLeftX="30" topLeftY="268" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键点 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="269" height="62" topLeftX="31" topLeftY="295" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="right"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="268" height="44" topLeftX="628" topLeftY="188" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键点 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="269" height="62" topLeftX="628" topLeftY="215" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="268" height="44" topLeftX="663" topLeftY="335" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键点 #4</span> - </strong> - </p> - </content> - </shape> - <shape width="269" height="62" topLeftX="664" topLeftY="363" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(305deg,rgba(11, 59, 229, 1) 0%,rgba(37, 216, 255, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="540" height="540" topLeftX="690" topLeftY="0" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="120" height="120" topLeftX="900" topLeftY="210" type="ellipse"> - <fill> - <fillColor color="rgba(37, 216, 255, 1)"/> - </fill> - </shape> - <shape width="456" height="236" topLeftX="36" topLeftY="157" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="90" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="90">感谢你的时间</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content> - <p/> - </content> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--marketing_plan.xml b/skills/lark-slides/assets/templates/marketing--marketing_plan.xml deleted file mode 100644 index 91258c121..000000000 --- a/skills/lark-slides/assets/templates/marketing--marketing_plan.xml +++ /dev/null @@ -1,1469 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>营销策划方案-裂图重新上传 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="XfIfbc1tYoFJ1sx5FWxcsCoBn0f" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="191" height="202" topLeftX="587" topLeftY="184" presetHandlers="8" alpha="0.9" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="545" height="101" topLeftX="207" topLeftY="204" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true" textAlign="center"> - <p>营销策划模板</p> - </content> - </shape> - <line startX="142" startY="47" endX="910" endY="47" alpha="0.29"> - <border color="rgba(147, 150, 156, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">1</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="615" height="44" topLeftX="172" topLeftY="290" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="16">MARKETING PLANNING </span> - </strong> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="16">TEMPLATE</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="92" height="116" topLeftX="295" topLeftY="26" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="161" height="77" topLeftX="319" topLeftY="71" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true" textAlign="center"> - <p>目录</p> - </content> - </shape> - <line startX="907" startY="119" endX="907" endY="515"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="908" startY="0" endX="908" endY="142"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="904" topLeftY="144" rotation="0" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">2</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="785" topLeftY="367" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="136" height="43" topLeftX="369" topLeftY="207" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动总体思路</span> - </strong> - </p> - </content> - </shape> - <shape width="136" height="38" topLeftX="369" topLeftY="229" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">General Idea</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="369" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="136" height="43" topLeftX="614" topLeftY="207" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动执行方案</span> - </strong> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="614" topLeftY="229" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="614" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <img src="NUtabqkWpohkfCxb523ckUYfnIf" width="254" height="489" topLeftX="26" topLeftY="26" exposure="16" contrast="-46" saturation="-93" temperature="-14"> - <crop type="rect" leftOffset="80" rightOffset="34" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="136" height="43" topLeftX="369" topLeftY="327" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动经费预算</span> - </strong> - </p> - </content> - </shape> - <shape width="136" height="38" topLeftX="369" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Budget</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="369" topLeftY="374" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="136" height="43" topLeftX="614" topLeftY="327" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动预期效果</span> - </strong> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="614" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Expected Results</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="614" topLeftY="374" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="Ha3Cbaf8PobZMvxI6VZcV7uznZc" width="480" height="540" topLeftX="480" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="27" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动总体思路</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="31" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">General Idea</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">4</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="101" height="90" topLeftX="41" topLeftY="88" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="407" height="62" topLeftX="77" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="true" textAlign="left"> - <p> - <span fontSize="28">活动总体思路</span> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="41" topLeftY="232" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="41" topLeftY="204" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="41" topLeftY="326" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="41" topLeftY="298" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="41" topLeftY="420" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="41" topLeftY="392" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <img src="Yb3sbX2Vooj3HyxQfB3cH9ErnOb" width="240" height="403" topLeftX="331" topLeftY="88" exposure="4" contrast="-51" saturation="-91" temperature="20"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="MhGabCLEBoKmRox0Q7dc6txbnhg" width="152" height="403" topLeftX="589" topLeftY="88" exposure="22" contrast="-35" saturation="-92" temperature="26"> - <crop type="rect" leftOffset="411" rightOffset="155" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="H8q1bdnT8o7bXAxIKIHc9IGLnUh" width="152" height="403" topLeftX="758" topLeftY="88" exposure="26" contrast="-35" saturation="-91" temperature="31"> - <crop type="rect" leftOffset="4" rightOffset="4" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="49" height="56" topLeftX="38" topLeftY="74" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">5</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="195" height="74" topLeftX="38" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="38" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第一阶段</span> - </strong> - </p> - </content> - </shape> - <shape width="407" height="56" topLeftX="47" topLeftY="82" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="left"> - <p> - <span fontSize="24">活动时间轴</span> - </p> - </content> - </shape> - <line startX="250" startY="194" endX="250" endY="426" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="195" height="74" topLeftX="267" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="267" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第二阶段</span> - </strong> - </p> - </content> - </shape> - <line startX="479" startY="194" endX="479" endY="426" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="195" height="74" topLeftX="498" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="498" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第三阶段</span> - </strong> - </p> - </content> - </shape> - <line startX="710" startY="194" endX="710" endY="426" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="195" height="74" topLeftX="727" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="727" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第四阶段</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="JezPbVNsHopdNuxR7ZecFO7Xnhf" width="480" height="540" topLeftX="480" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="27" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动执行方案</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="31" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">6</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="282" startY="250" endX="90" endY="250" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="907" startY="119" endX="907" endY="515"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="908" startY="0" endX="908" endY="142"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="904" topLeftY="144" rotation="0" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">7</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="785" topLeftY="367" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q3 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="68" topLeftX="30" topLeftY="64" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(24, 24, 26, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="32">活动执行方案</span> - </p> - </content> - </shape> - <shape width="231" height="44" topLeftX="34" topLeftY="41" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="16">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <shape width="34" height="34" topLeftX="46" topLeftY="233" type="ellipse"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="53" topLeftY="240" iconType="iconpark/Base/all-application.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="34" height="34" topLeftX="294" topLeftY="233" type="ellipse"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="301" topLeftY="240" iconType="iconpark/Office/transform.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="34" height="34" topLeftX="542" topLeftY="233" type="ellipse"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="549" topLeftY="240" iconType="iconpark/Travel/airplane.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <line startX="530" startY="250" endX="337" endY="250" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="240" height="41" topLeftX="42" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="192" height="56" topLeftX="62" topLeftY="314" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="53" topLeftY="332" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="192" height="38" topLeftX="62" topLeftY="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="53" topLeftY="378" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="240" height="41" topLeftX="294" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="192" height="56" topLeftX="313" topLeftY="314" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="305" topLeftY="332" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="192" height="38" topLeftX="313" topLeftY="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="305" topLeftY="378" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="192" height="74" topLeftX="313" topLeftY="391" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="305" topLeftY="408" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="240" height="41" topLeftX="542" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="192" height="56" topLeftX="561" topLeftY="314" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="553" topLeftY="332" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="907" startY="119" endX="907" endY="515"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="908" startY="0" endX="908" endY="142"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="904" topLeftY="144" rotation="0" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">8</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="785" topLeftY="367" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <img src="W2oebPLuVoS3XzxoJc7cz2xtnxf" width="243" height="466" topLeftX="35" topLeftY="37" exposure="16" contrast="-46" saturation="-93" temperature="-14"> - <crop type="rect" leftOffset="8" rightOffset="8" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="60" height="64" topLeftX="341" topLeftY="163" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="177" height="59" topLeftX="361" topLeftY="179" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" bold="true" textAlign="left"> - <p> - <span fontSize="26">活动执行方案</span> - </p> - </content> - </shape> - <shape width="231" height="38" topLeftX="363" topLeftY="221" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="254" topLeftX="363" topLeftY="252" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。</span> - </p> - <p/> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。此处添加正文此处添加正文,此处添加正文。此处添加正文此处添加正文,此处添加正文。</span> - </p> - <p/> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文。</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="616" topLeftY="163" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题或更多内容</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="77" topLeftX="616" topLeftY="183" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="38">1,891+</span> - </strong> - </p> - </content> - </shape> - <line startX="817" startY="252" endX="624" endY="252" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="240" height="41" topLeftX="616" topLeftY="286" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题或更多内容</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="77" topLeftX="616" topLeftY="307" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="38">60+</span> - </strong> - </p> - </content> - </shape> - <line startX="817" startY="375" endX="624" endY="375" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="240" height="41" topLeftX="616" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题或更多内容</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="77" topLeftX="616" topLeftY="432" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="38">13,762+</span> - </strong> - </p> - </content> - </shape> - <line startX="816" startY="500" endX="624" endY="500" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="KSLDbAtVTowNhQxnPfUcK4s2nzc" width="480" height="540" topLeftX="0" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="672" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动经费预算</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="699" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Budget</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">9</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="49" height="56" topLeftX="58" topLeftY="84" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">10</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <shape width="407" height="56" topLeftX="67" topLeftY="92" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="left"> - <p> - <span fontSize="24">活动经费预算</span> - </p> - </content> - </shape> - <img src="IrLPbZFuSok7kHxnOvFciHi9nPA" width="145" height="145" topLeftX="58" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="GO5pblEDSo03uExEIlEc9xXdnyd" width="145" height="145" topLeftX="267" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="EzCabT0y8o65r8xgM2Jcf25zncb" width="145" height="145" topLeftX="476" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="CULmb2XWmouit4xzxbKc3U7ynxg" width="145" height="145" topLeftX="685" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="24" height="2" topLeftX="66" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="24" height="2" topLeftX="275" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="24" height="2" topLeftX="484" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="24" height="2" topLeftX="693" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="144" height="41" topLeftX="58" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="41" topLeftX="267" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="41" topLeftX="476" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="41" topLeftX="685" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="58" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="266" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="476" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="685" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="W9OibVJ7cooFpyxooUpcU5Jfnfd" width="527" height="361" topLeftX="433" topLeftY="96" exposure="62" contrast="12" saturation="-92" temperature="1"> - <crop type="rect" leftOffset="59" rightOffset="59" topOffset="0" bottomOffset="0" presetHandlers="4"/> - </img> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">11</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <img src="IcRMb9tt6ony53x6QO6cUxAknne" width="587" height="407" topLeftX="373" topLeftY="91" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="88" topOffset="0" bottomOffset="0"/> - </img> - <shape width="63" height="64" topLeftX="32" topLeftY="91" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="177" height="59" topLeftX="52" topLeftY="107" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" bold="true" textAlign="left"> - <p> - <span fontSize="26">活动经费预算</span> - </p> - </content> - </shape> - <shape width="34" height="34" topLeftX="63" topLeftY="201" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(66, 66, 66, 1)"/> - </fill> - <border color="rgba(147, 150, 156, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="20" height="20" topLeftX="70" topLeftY="208" alpha="0.6" iconType="iconpark/Money/paper-money-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="34" height="34" topLeftX="63" topLeftY="302" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(66, 66, 66, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="70" topLeftY="309" alpha="0.6" iconType="iconpark/Money/financing-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="144" height="44" topLeftX="101" topLeftY="195" alpha="0.7" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="44" topLeftX="101" topLeftY="297" alpha="0.7" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="232" height="56" topLeftX="101" topLeftY="228" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。</span> - </p> - </content> - </shape> - <shape width="232" height="56" topLeftX="101" topLeftY="329" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="UnojbYZiZoljtNxOh8AcvjpGnck" width="480" height="540" topLeftX="0" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="672" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动预期效果</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="699" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Expected Results</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">12</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="FtzebenNwoDtQoxtmggceadnn1d" width="961" height="539" topLeftX="0" topLeftY="0" exposure="16" saturation="-91" temperature="12"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="674" height="476" topLeftX="217" topLeftY="22" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="300" fontFamily="Trebuchet MS" color="rgba(255, 219, 29, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 219, 29, 1)" fontSize="300" fontFamily="Trebuchet MS">40%</span> - </p> - </content> - </shape> - <shape width="165" height="122" topLeftX="100" topLeftY="97" type="triangle"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="35" height="157" topLeftX="165" topLeftY="213" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <img src="HJQ4bD96zoxB41xEmHncaqUVnrc" width="771" height="202" topLeftX="73" topLeftY="318" exposure="16" saturation="-91" temperature="12"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="20" presetHandlers="0"/> - </img> - <line startX="142" startY="47" endX="910" endY="47" alpha="0.29"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">13</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="49" height="56" topLeftX="58" topLeftY="84" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">14</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <shape width="407" height="56" topLeftX="67" topLeftY="92" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="left"> - <p> - <span fontSize="24">活动预期效果</span> - </p> - </content> - </shape> - <shape width="213" height="74" topLeftX="707" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="707" topLeftY="338" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #6</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="656" topLeftY="338" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="26" height="26" topLeftX="666" topLeftY="348" iconType="iconpark/Base/tag-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="707" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="707" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #3</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="656" topLeftY="199" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="664" topLeftY="206" iconType="iconpark/Base/hourglass-null.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="408" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="408" topLeftY="338" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #5</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="357" topLeftY="338" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="26" height="26" topLeftX="367" topLeftY="348" iconType="iconpark/Base/lightning.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="408" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="408" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #2</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="357" topLeftY="199" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="365" topLeftY="206" iconType="iconpark/Base/aiming.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="108" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="108" topLeftY="338" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #4</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="58" topLeftY="338" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="26" height="26" topLeftX="68" topLeftY="348" iconType="iconpark/Abstract/game-emoji.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="108" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="108" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #1</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="58" topLeftY="199" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="66" topLeftY="206" iconType="iconpark/Travel/mountain.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <shape width="337" height="78" topLeftX="600" topLeftY="417" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true" lineSpacing="multiple:1.2" textAlign="right"> - <p lineSpacing="multiple:1.2"> - <span fontSize="48">谢谢观看</span> - </p> - </content> - </shape> - <img src="C7EfbhI7PoHav4xydHsc789rnsf" width="534" height="540" topLeftX="0" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop type="rect" leftOffset="0" rightOffset="6" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <line startX="142" startY="47" endX="726" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">15</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="534" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <shape width="231" height="50" topLeftX="699" topLeftY="385" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">Thank you</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--marketing_strategy.xml b/skills/lark-slides/assets/templates/marketing--marketing_strategy.xml deleted file mode 100644 index 25191cd88..000000000 --- a/skills/lark-slides/assets/templates/marketing--marketing_strategy.xml +++ /dev/null @@ -1,1484 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>市场营销策略 - - - - - - - <headline fontColor="#000000FF" fontSize="28"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="Rqf0bfVG2oy8HDx7UIWcRixGngc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="906" startY="521" endX="906" endY="19" alpha="0.27"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="547" height="132" topLeftX="54" topLeftY="58" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="80">市场营销策略</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="80" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" autoFit="shape-auto-fit"> - <p>你的团队</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="425" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="right" autoFit="shape-auto-fit"> - <p>2025.09.12</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HdIobFtI6oDJddxsI06cTH6BnJF" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="488" height="58" topLeftX="53" topLeftY="85" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>目录</p> - </content> - </shape> - <shape width="200" height="74" topLeftX="69" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="200" height="44" topLeftX="69" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong>当下状况</strong> - </p> - </content> - </shape> - <shape width="200" height="74" topLeftX="360" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="200" height="44" topLeftX="360" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong>走向市场</strong> - </p> - </content> - </shape> - <shape width="200" height="74" topLeftX="651" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="200" height="44" topLeftX="651" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong>总结思考</strong> - </p> - </content> - </shape> - <shape width="48" height="48" topLeftX="81" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"> - <p> - <strong> - <span color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)" fontSize="18">1</span> - </strong> - </p> - </content> - <shadow offset="9" blur="18" color="rgba(98, 99, 100, 0.5)"/> - </shape> - <shape width="48" height="48" topLeftX="372" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"> - <p> - <strong> - <span color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)" fontSize="18">2</span> - </strong> - </p> - </content> - <shadow offset="9" blur="18" color="rgba(98, 99, 100, 0.5)"/> - </shape> - <shape width="48" height="48" topLeftX="663" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"> - <p> - <strong> - <span color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)" fontSize="18">3</span> - </strong> - </p> - </content> - <shadow offset="9" blur="18" color="rgba(98, 99, 100, 0.5)"/> - </shape> - <shape width="318" height="56" topLeftX="56" topLeftY="126" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="IbymbiVxAo8e40xyhx1cCN4onmd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="906" startY="521" endX="906" endY="19" alpha="0.27"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="468" height="56" topLeftX="57" topLeftY="313" alpha="0.65" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">CURRENT STATUS</span> - </p> - </content> - </shape> - <shape width="688" height="132" topLeftX="47" topLeftY="343" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="80">当下状况</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="80" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>你的团队</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="425" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p>2025.09.12</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="UAazbKaXDoWpMyxAkKUc4SMSndf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="342" height="110" topLeftX="51" topLeftY="125" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">在这份 Slides 中,我们会通过简洁明确地说明和介绍,告诉您如何让您的产品在市场中取得成功,已经您的竞争对手,市场环境的具体状况。 </span> - </p> - <p/> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">您可以从中获得最新的信息,以帮助您更好地制定市场策略</span> - </p> - </content> - </shape> - <shape width="353" height="58" topLeftX="51" topLeftY="71" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">行业背景</span> - </p> - </content> - </shape> - <img src="AtXobKQZnoZZhqxAbsqcVXm0nrd" width="336" height="436" topLeftX="498" topLeftY="52" temperature="-100"> - <crop type="rect" leftOffset="50" rightOffset="50" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DFSxbbPAQoNi6WxFrj6csrHRnSf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="261" height="56" topLeftX="51" topLeftY="385" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="285" height="58" topLeftX="51" topLeftY="341" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">市场趋势</span> - </p> - </content> - </shape> - <line startX="375" startY="425" endX="889" endY="426"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="357" endX="889" endY="358" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="290" endX="889" endY="291" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="222" endX="890" endY="223" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="155" endX="889" endY="156" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="88" endX="889" endY="89" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="22" height="282" topLeftX="842" topLeftY="144" presetHandlers="0" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="103" topLeftX="397" topLeftY="323" presetHandlers="0" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="244" topLeftX="488" topLeftY="182" presetHandlers="0" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="169" topLeftX="574" topLeftY="257" presetHandlers="0" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="247" topLeftX="666" topLeftY="179" presetHandlers="0" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="311" topLeftX="755" topLeftY="115" presetHandlers="0" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="50" height="38" topLeftX="381" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2019</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="474" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2020</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="560" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2021</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="652" topLeftY="429" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2022</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="741" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2023</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="827" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2024</span> - </p> - </content> - </shape> - <shape width="22" height="234" topLeftX="842" topLeftY="193" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="190" topLeftX="755" topLeftY="236" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="114" topLeftX="666" topLeftY="313" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="151" topLeftX="574" topLeftY="275" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="127" topLeftX="488" topLeftY="299" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="94" topLeftX="396" topLeftY="332" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="50" height="38" topLeftX="321" topLeftY="71" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">100</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="320" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">80</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="320" topLeftY="204" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">60</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="321" topLeftY="274" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">40</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="320" topLeftY="342" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">20</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="K6PSbSEG3oGyjbxuVTpc9jeQnib" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="404" height="404" topLeftX="-21" topLeftY="-75" alpha="0.15" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="242" height="242" topLeftX="60" topLeftY="7" alpha="0.15" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="115" height="115" topLeftX="123" topLeftY="70" alpha="0.15" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="-21" startY="127" endX="383" endY="128" alpha="0.15"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="181" startY="248" endX="181" endY="7" alpha="0.15"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="244" height="39" topLeftX="-73" topLeftY="250" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">低效率</span> - </strong> - </p> - </content> - </shape> - <shape width="244" height="39" topLeftX="729" topLeftY="251" rotation="90" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">高效率</span> - </strong> - </p> - </content> - </shape> - <shape width="244" height="39" topLeftX="327" topLeftY="492" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">低价格</span> - </strong> - </p> - </content> - </shape> - <shape width="244" height="39" topLeftX="327" topLeftY="6" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">高价格</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="200" topLeftY="382" type="ellipse"> - <fill> - <fillColor color="linear-gradient(354deg,rgba(188, 80, 255, 1) 0%,rgba(47, 43, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">J</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="159" topLeftY="427" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="163" topLeftY="155" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(242, 243, 245, 1)"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="18">H</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="134" topLeftY="225" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="48" height="48" topLeftX="322" topLeftY="321" type="ellipse"> - <fill> - <fillColor color="rgba(242, 243, 245, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>I</p> - </content> - </shape> - <shape width="128" height="38" topLeftX="282" topLeftY="367" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="58" height="58" topLeftX="346" topLeftY="182" type="ellipse"> - <fill> - <fillColor color="linear-gradient(354deg,rgba(188, 80, 255, 1) 0%,rgba(47, 43, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">F</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="309" topLeftY="234" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="286" topLeftY="52" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(242, 243, 245, 1)"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="18">G</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="256" topLeftY="122" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="503" topLeftY="175" type="ellipse"> - <fill> - <fillColor color="rgba(242, 243, 245, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>C</p> - </content> - </shape> - <shape width="128" height="38" topLeftX="462" topLeftY="219" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="482" topLeftY="301" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(242, 243, 245, 1)"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="18">E</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="453" topLeftY="371" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="97" height="97" topLeftX="634" topLeftY="351" type="ellipse"> - <fill> - <fillColor color="linear-gradient(354deg,rgba(188, 80, 255, 1) 0%,rgba(47, 43, 253, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">D</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="618" topLeftY="448" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="646" topLeftY="160" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(242, 243, 245, 1)"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="18">B</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="617" topLeftY="230" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="44" height="44" topLeftX="569" topLeftY="93" type="ellipse"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">A</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="528" topLeftY="137" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(11, 11, 11, 1)"/> - </fill> - </style> - <data> - <shape width="488" height="69" topLeftX="48" topLeftY="43" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">你的目标用户</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(11, 11, 11, 1)"/> - </fill> - </style> - <data> - <shape width="340" height="442" topLeftX="51" topLeftY="48" presetHandlers="36" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="RW4PbdtmJoW7ucxRXj3cMFxTnCb" width="343" height="447" topLeftX="50" topLeftY="46"> - <crop type="rect" leftOffset="0.42" rightOffset="0.42" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <shape width="444" height="146" topLeftX="425" topLeftY="141" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">关于</span> - </p> - <p> - <span color="rgba(255, 255, 255, 1)">年近三十的单身独立男性。有雄心勃勃的创意,十几岁时就开始创办自己的服装品牌。</span> - </p> - <p/> - <p> - <span color="rgba(255, 255, 255, 1)">期望和需求</span> - </p> - <p> - <span color="rgba(255, 255, 255, 1)">描述您的产品或服务如何满足目标市场的期望和需求。您的业务将提供什么,目前的竞争对手没有提供的东西</span> - </p> - </content> - </shape> - <shape width="423" height="74" topLeftX="426" topLeftY="76" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(90deg,rgba(255, 46, 0, 1) 0%,rgba(250, 115, 39, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="linear-gradient(90deg,rgba(255, 46, 0, 1) 0%,rgba(250, 115, 39, 1) 100%)" fontSize="40">Aaron Smith</span> - </strong> - </p> - </content> - </shape> - <shape width="257" height="47" topLeftX="426" topLeftY="53" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">用户画像</span> - </p> - </content> - </shape> - <shape width="94" height="24" topLeftX="435" topLeftY="316" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 0, 0, 1)"> - <p> - <span color="rgba(255, 0, 0, 1)" fontSize="12">好奇心 #1</span> - </p> - </content> - </shape> - <shape width="94" height="24" topLeftX="535" topLeftY="316" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 0, 0, 1)"> - <p> - <span color="rgba(255, 0, 0, 1)" fontSize="12">消费力 #2</span> - </p> - </content> - </shape> - <shape width="94" height="24" topLeftX="636" topLeftY="315" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 0, 0, 1)"> - <p> - <span color="rgba(255, 0, 0, 1)" fontSize="12">带货能力 #3</span> - </p> - </content> - </shape> - <shape width="109" height="38" topLeftX="431" topLeftY="373" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <strong> - <span color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)">个性特征</span> - </strong> - </p> - </content> - </shape> - <shape width="98" height="38" topLeftX="632" topLeftY="428" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <strong> - <span color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" fontSize="12">消费力 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="185" height="7" topLeftX="436" topLeftY="444" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="7" topLeftX="436" topLeftY="444" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="94" height="38" topLeftX="632" topLeftY="403" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <strong> - <span color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" fontSize="12">好奇心 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="185" height="7" topLeftX="436" topLeftY="418" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="109" height="7" topLeftX="436" topLeftY="418" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="99" height="38" topLeftX="631" topLeftY="455" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <strong> - <span color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" fontSize="12">带货能力 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="184" height="8" topLeftX="435" topLeftY="469" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="150" height="7" topLeftX="435" topLeftY="471" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="IbymbiVxAo8e40xyhx1cCN4onmd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="906" startY="521" endX="906" endY="19" alpha="0.27"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="468" height="56" topLeftX="57" topLeftY="313" alpha="0.65" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">GO-TO-MARKET</span> - </p> - </content> - </shape> - <shape width="688" height="132" topLeftX="47" topLeftY="343" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="80">走向市场</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="425" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>2025.09.12</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="80" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>你的团队</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="80" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>你的团队</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="425" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p>2025.09.12</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DkerbBnJBom9YbxaZaqcv7Ysnug" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="596" height="69" topLeftX="46" topLeftY="53" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">我们的目标</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(11, 11, 11, 1)"/> - </fill> - </style> - <data> - <shape width="63" height="63" topLeftX="202" topLeftY="92" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="187" height="74" topLeftX="79" topLeftY="189" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="157" height="38" topLeftX="108" topLeftY="163" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">抖音 #1</span> - </strong> - </p> - </content> - </shape> - <icon width="44" height="44" topLeftX="212" topLeftY="101" iconType="iconpark/Travel/planet.svg"> - <border color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="63" height="63" topLeftX="202" topLeftY="277" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="175" height="74" topLeftX="90" topLeftY="374" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="157" height="38" topLeftX="108" topLeftY="347" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> 小红书 #2</span> - </strong> - </p> - </content> - </shape> - <icon width="44" height="44" topLeftX="212" topLeftY="286" iconType="iconpark/Travel/world.svg"> - <border color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="63" height="63" topLeftX="704" topLeftY="277" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="177" height="74" topLeftX="704" topLeftY="374" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="157" height="38" topLeftX="704" topLeftY="347" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">微信公众号 #4</span> - </strong> - </p> - </content> - </shape> - <icon width="44" height="44" topLeftX="714" topLeftY="286" iconType="iconpark/Abstract/circular-connection.svg"> - <border color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="63" height="63" topLeftX="704" topLeftY="92" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - </shape> - <shape width="177" height="74" topLeftX="704" topLeftY="189" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="157" height="38" topLeftX="704" topLeftY="162" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">微信视频号 #3</span> - </strong> - </p> - </content> - </shape> - <icon width="44" height="44" topLeftX="714" topLeftY="101" iconType="iconpark/Abstract/sphere.svg"> - <border color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="K78bbZ4suoHJpHxY4vucGfrUnMF" width="303" height="303" topLeftX="331" topLeftY="115"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="178" height="85" topLeftX="359" topLeftY="216" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="54">1668</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="97" topLeftX="538" topLeftY="233" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)" fontSize="32">万</span> - </p> - </content> - </shape> - <shape width="157" height="47" topLeftX="405" topLeftY="286" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">全平台曝光量</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ILoYbyU76oWZoBxsAbNc80yOntg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="471" startY="175" endX="471" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="262" startY="175" endX="262" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="680" startY="175" endX="680" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="54" startY="175" endX="54" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="176" height="74" topLeftX="697" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="176" height="74" topLeftX="488" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="176" height="74" topLeftX="279" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="176" height="74" topLeftX="70" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="574" height="58" topLeftX="54" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">行动计划</span> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="80" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">多平台曝光 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="132" height="30" topLeftX="289" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">头部KOL签约 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="498" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">SEO优化 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="707" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">用户自发传播#4</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(11, 11, 11, 1)"/> - </fill> - </style> - <data> - <shape width="342" height="56" topLeftX="51" topLeftY="115" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="353" height="58" topLeftX="51" topLeftY="71" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">预算分配计划</span> - </p> - </content> - </shape> - <table topLeftX="59" topLeftY="226"> - <colgroup> - <col span="3" width="269"/> - </colgroup> - <tr height="44"> - <td> - <borderTop color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">行动项目</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="linear-gradient(270deg,rgba(255, 0, 0, 1) 0%,rgba(250, 102, 39, 1) 100%)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">分配预算</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">负责人</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">多平台曝光</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 0, 0, 0.43)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"> - <p> - <span color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" fontSize="14">$ 20,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@ 马克</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">头部 KOL 签约</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 0, 0, 0.431)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"> - <p> - <span color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" fontSize="14">$ 50,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@ 马克</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">SOE 优化</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 0, 0, 0.431)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(0deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"> - <p> - <span color="linear-gradient(0deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" fontSize="14">$30,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@ 马克</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">总计</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 0, 0, 0.431)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)"> - <p> - <span color="linear-gradient(90deg,rgba(255, 77, 0, 1) 0%,rgba(250, 128, 39, 1) 100%)" fontSize="14">$ 100,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@ 马克</span> - </strong> - </p> - </content> - </td> - </tr> - </table> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="IbymbiVxAo8e40xyhx1cCN4onmd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="906" startY="521" endX="906" endY="19" alpha="0.27"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="468" height="56" topLeftX="57" topLeftY="313" alpha="0.65" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">SUMMARY</span> - </p> - </content> - </shape> - <shape width="688" height="132" topLeftX="47" topLeftY="343" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="80">总结思考</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="80" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>你的团队</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="425" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p>2025.09.12</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="P7x5bUg3CoMr4kxUJTvcMo5Wncc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="460" startY="184" endX="460" endY="390" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="326" height="92" topLeftX="508" topLeftY="212" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">仅有规划还不够,必须积极地执行计划,采取行动并坚持不懈地追求目标。只有将规划与执行相结合,才能取得真正的成功。</span> - </p> - </content> - </shape> - <shape width="326" height="140" topLeftX="54" topLeftY="212" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">目标客户群体的定位是指确定公司或产品的目标市场,并确定目标客户群体的特征和需求。这有助于公司明确其产品或服务的目标客户,以便更好地满足他们的需求,提高市场份额,并实现公司的长期发展目标。</span> - </p> - </content> - </shape> - <shape width="360" height="44" topLeftX="508" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">2、 根据市场的变动实时调整策略,快速执行</span> - </p> - </content> - </shape> - <shape width="360" height="44" topLeftX="58" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">1、目标客户群体的定位</span> - </p> - </content> - </shape> - <shape width="574" height="58" topLeftX="54" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">关键影响因素</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CPTXblIQoo0A73xGUitcXPt9nzf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="906" startY="521" endX="906" endY="19" alpha="0.27"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="468" height="56" topLeftX="57" topLeftY="313" alpha="0.65" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">THANK YOU</span> - </p> - </content> - </shape> - <shape width="688" height="132" topLeftX="47" topLeftY="343" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="80">感谢观看</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="80" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>你的团队</p> - </content> - </shape> - <shape width="176" height="38" topLeftX="845" topLeftY="425" rotation="90" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="right"> - <p>2025.09.12</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--product_whitepaper.xml b/skills/lark-slides/assets/templates/marketing--product_whitepaper.xml deleted file mode 100644 index 6ba3fa6d9..000000000 --- a/skills/lark-slides/assets/templates/marketing--product_whitepaper.xml +++ /dev/null @@ -1,1455 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>产品白皮书 - - - - - - - <headline fontColor="#000000FF" fontSize="42"/> - <sub-headline fontColor="#000000FF" fontSize="18"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="Iag8bM9Nvo5gGFxoktKcGdaqnEd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="488" height="44" topLeftX="28" topLeftY="311" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 64, 58, 1)"> - <p lineSpacing="multiple:1.4"> - <span color="rgba(255, 64, 58, 1)" fontSize="16">你要做的第一件事是定义你正在开发的新产品。</span> - </p> - </content> - </shape> - <shape width="698" height="146" topLeftX="23" topLeftY="175" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="90" color="linear-gradient(60deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.4"> - <p> - <strong> - <span color="linear-gradient(60deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" fontSize="90">互联网产品展示</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="39" topLeftX="28" topLeftY="476" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(43, 47, 54, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left"> - <p>团队名称</p> - </content> - </shape> - <shape width="178" height="38" topLeftX="28" topLeftY="19" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">品牌 LOGO</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="189" startY="234" endX="189" endY="389" alpha="0.5"> - <border color="rgba(255, 64, 58, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="125" height="77" topLeftX="164" topLeftY="112" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)">目录</span> - </p> - </content> - </shape> - <shape width="328" height="77" topLeftX="289" topLeftY="112" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(43, 47, 54, 1)">CONTENTS</span> - </p> - </content> - </shape> - <shape width="125" height="44" topLeftX="200" topLeftY="216" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>产品功能</strong> - </p> - </content> - </shape> - <shape width="125" height="44" topLeftX="200" topLeftY="267" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>功能展示</strong> - </p> - </content> - </shape> - <shape width="139" height="44" topLeftX="200" topLeftY="317" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>来自用户的声音</strong> - </p> - </content> - </shape> - <shape width="157" height="44" topLeftX="200" topLeftY="368" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong>适合你的付费计划</strong> - </p> - </content> - </shape> - <shape width="385" height="38" topLeftX="391" topLeftY="371" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="183" topLeftY="385" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="385" height="38" topLeftX="391" topLeftY="320" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="183" topLeftY="334" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="385" height="38" topLeftX="391" topLeftY="270" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="183" topLeftY="283" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="385" height="38" topLeftX="391" topLeftY="219" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="183" topLeftY="232" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ZUPsb9AoMoZJrTxfBrycsE04nzb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="587" height="107" topLeftX="126" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>产品介绍</p> - </content> - </shape> - <shape width="115" height="106" topLeftX="23" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="548" height="77" topLeftX="99" topLeftY="48" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span fontSize="42">产品名称</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="99" topLeftY="26" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <span fontSize="16">PRODUCT NAME</span> - </p> - </content> - </shape> - <shape width="608" height="61" topLeftX="105" topLeftY="114" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">单击此处输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理解您所传达的信息。</span> - </p> - </content> - </shape> - <img src="HjPWbeFxAocdZqxrXwUcCmUBnUf" width="717" height="340" topLeftX="121" topLeftY="200"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="79" presetHandlers="0"/> - </img> - <img src="BqdMbEXRRoU0PdxalK8cNrojnOe" width="899" height="354" topLeftX="31" topLeftY="186" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="189"/> - </img> - <img src="Enr0be8iBoP2Q0xE7n3cHA2CnFb" width="169" height="265" topLeftX="730" topLeftY="275"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="102" presetHandlers="0"/> - </img> - <img src="Y8U2b9kf1ozJAgx5752ciAvCnSg" width="184" height="270" topLeftX="723" topLeftY="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="101" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="VZcZbYmGWovJc9xYjxYcMwDrnRh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="359" height="110" topLeftX="65" topLeftY="157" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</p> - </content> - </shape> - <shape width="364" height="77" topLeftX="64" topLeftY="92" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span fontSize="42">产品名称</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="69" topLeftY="70" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <span fontSize="16">PRODUCT NAME</span> - </p> - </content> - </shape> - <img src="HWIFbnYcfoIOYTx0iuYcmgK3nqh" width="339" height="466" topLeftX="498" topLeftY="74"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="268" presetHandlers="0"/> - </img> - <img src="DNFgbeqhGocMcfxBkB8clhzbn3f" width="376" height="478" topLeftX="480" topLeftY="62"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="284" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="359" height="140" topLeftX="415" topLeftY="230" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - <p lineSpacing="multiple:1.7" letterSpacing="1"/> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="364" height="77" topLeftX="410" topLeftY="165" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span fontSize="42">产品名称</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="45" topLeftX="415" topLeftY="143" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <span fontSize="18" bold="false">PRODUCT NAME</span> - </p> - </content> - </shape> - <img src="Htanbhm8Ioj6WIxnTkCcllaMnLf" width="196" height="424" topLeftX="160" topLeftY="59"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KgrfbVWYnoqsorx2v5zcApudnRe" width="217" height="438" topLeftX="150" topLeftY="51"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ZUPsb9AoMoZJrTxfBrycsE04nzb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="587" height="107" topLeftX="126" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>功能展示</p> - </content> - </shape> - <shape width="115" height="106" topLeftX="23" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="N2MJbJN1OoLokkxeqF2cidMinth" width="623" height="359" topLeftX="169" topLeftY="181"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="2" bottomOffset="2" presetHandlers="0"/> - </img> - <img src="XLL8bZvomo41W5xzPX9cZ9NknVE" width="780" height="372" topLeftX="90" topLeftY="168" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="99" presetHandlers="0"/> - </img> - <shape width="472" height="56" topLeftX="244" topLeftY="103" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="548" height="77" topLeftX="206" topLeftY="37" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>功能演示</p> - </content> - </shape> - <line startX="556" startY="368" endX="829" endY="367"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <shape width="124" height="30" topLeftX="819" topLeftY="352" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">功能 #2</span> - </strong> - </p> - </content> - </shape> - <line startX="254" startY="287" endX="124" endY="287"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <shape width="124" height="30" topLeftX="18" topLeftY="272" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">功能 #1</span> - </strong> - </p> - </content> - </shape> - <line startX="254" startY="466" endX="124" endY="465"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <shape width="124" height="30" topLeftX="18" topLeftY="450" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">功能 #3</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FYWBbVp0toMv72xFHL3cgVrenag" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="240" height="44" topLeftX="80" topLeftY="368" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>功能名字 #1</p> - </content> - </shape> - <shape width="240" height="44" topLeftX="360" topLeftY="368" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>功能名字 #2</p> - </content> - </shape> - <shape width="240" height="44" topLeftX="640" topLeftY="368" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>功能名字 #3</p> - </content> - </shape> - <shape width="240" height="56" topLeftX="80" topLeftY="398" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。</span> - </p> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="360" topLeftY="398" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。</span> - </p> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="640" topLeftY="398" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。</span> - </p> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="240" height="275" topLeftX="80" topLeftY="86" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="240" height="275" topLeftX="360" topLeftY="86" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="240" height="275" topLeftX="640" topLeftY="86" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="RUWVbhfBYogphYxc7esc1NRznBc" width="150" height="203" topLeftX="125" topLeftY="159"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="122" presetHandlers="0"/> - </img> - <img src="EwnnbNJh4ocDBDxGtdJceAEnnh4" width="168" height="210" topLeftX="116" topLeftY="151"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="129" presetHandlers="0"/> - </img> - <img src="WwAlbmoGnofr2MxpY1qc5vkHn9b" width="151" height="204" topLeftX="405" topLeftY="157"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="122" presetHandlers="0"/> - </img> - <img src="CbcvbbpX4oHR5gxjAAyc4tD9nvc" width="168" height="210" topLeftX="396" topLeftY="151"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="130" presetHandlers="0"/> - </img> - <img src="BqIHbeIjnokuhUxjUlZcUkmHnhb" width="151" height="203" topLeftX="685" topLeftY="159"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="124" presetHandlers="0"/> - </img> - <img src="M18cbwdukopqVaxtnPvcey9anrc" width="169" height="210" topLeftX="676" topLeftY="151"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="132" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FYWBbVp0toMv72xFHL3cgVrenag" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="191" height="244" topLeftX="697" topLeftY="176" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="Ae64bWfE0ohJ2IxqIrgc6C35ntf" width="165" height="120" topLeftX="710" topLeftY="191"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="23" bottomOffset="23" presetHandlers="8"/> - </img> - <shape width="191" height="244" topLeftX="489" topLeftY="176" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="IL58bdiheo3EUyxiQ5kcrlalnvh" width="165" height="120" topLeftX="502" topLeftY="191"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="79" bottomOffset="18" presetHandlers="8"/> - </img> - <shape width="191" height="244" topLeftX="280" topLeftY="176" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="F63obrRbBormf2xAM6Uc5Tqjn5f" width="165" height="120" topLeftX="293" topLeftY="191"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="23" bottomOffset="23" presetHandlers="8"/> - </img> - <shape width="191" height="244" topLeftX="72" topLeftY="176" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="W21Lb9z2VoGRYVxlnZhc92XAn2d" width="165" height="120" topLeftX="85" topLeftY="191"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="97" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="608" height="56" topLeftX="176" topLeftY="103" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="548" height="77" topLeftX="206" topLeftY="37" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>功能演示</p> - </content> - </shape> - <shape width="191" height="44" topLeftX="72" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">功能 #1</span> - </p> - </content> - </shape> - <shape width="191" height="56" topLeftX="72" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">单击此处输入你的正文,</span> - </p> - <p> - <span color="rgba(43, 47, 54, 1)">为了更好地演示发布效果</span> - </p> - </content> - </shape> - <shape width="191" height="44" topLeftX="280" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">功能 #2</span> - </p> - </content> - </shape> - <shape width="191" height="56" topLeftX="280" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">单击此处输入你的正文,</span> - </p> - <p> - <span color="rgba(43, 47, 54, 1)">为了更好地演示发布效果</span> - </p> - </content> - </shape> - <shape width="191" height="44" topLeftX="489" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">功能 #3</span> - </p> - </content> - </shape> - <shape width="191" height="56" topLeftX="489" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">单击此处输入你的正文,</span> - </p> - <p> - <span color="rgba(43, 47, 54, 1)">为了更好地演示发布效果</span> - </p> - </content> - </shape> - <shape width="191" height="44" topLeftX="697" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">功能 #4</span> - </p> - </content> - </shape> - <shape width="191" height="56" topLeftX="697" topLeftY="351" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">单击此处输入你的正文,</span> - </p> - <p> - <span color="rgba(43, 47, 54, 1)">为了更好地演示发布效果</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="O3u4bxvhYooIFOxtEIZcg5t6n8f" width="196" height="424" topLeftX="160" topLeftY="59"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="RJ0kbLgPUok4P7xV57pc3EORnGf" width="217" height="438" topLeftX="150" topLeftY="51"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="260" height="44" topLeftX="447" topLeftY="385" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35"> - <p>功能</p> - </content> - </shape> - <shape width="260" height="56" topLeftX="447" topLeftY="415" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">单击此处输入你的正文,文字是您思想的提炼</span> - </p> - <p> - <span fontSize="12">为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <line startX="432" startY="62" endX="432" endY="335"> - <border color="linear-gradient(90deg,rgba(31, 35, 41, 0) 0%,rgba(31, 35, 41, 1) 30%,rgba(31, 35, 41, 1) 56%,rgba(31, 35, 41, 0) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="314" startY="169" endX="432" endY="169"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <img src="RchVbkX58oLbYQxsLWocrYdPnSg" width="206" height="313" topLeftX="447" topLeftY="62"> - <shadow offset="10" angle="90" blur="28" color="rgba(0, 0, 0, 0.05)"/> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="UogWbolgfoRv7dxhodzcRraWnsf" width="206" height="249" topLeftX="659" topLeftY="62"> - <shadow offset="10" angle="90" blur="28" color="rgba(0, 0, 0, 0.05)"/> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="400" height="298" topLeftX="485" topLeftY="180" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="400" height="298" topLeftX="74" topLeftY="180" presetHandlers="8" alpha="0.12" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="374" height="44" topLeftX="87" topLeftY="372" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">功能 #1</span> - </p> - </content> - </shape> - <shape width="374" height="56" topLeftX="87" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">单击此处输入你的正文,文字是您思想的提炼</span> - </p> - <p> - <span color="rgba(43, 47, 54, 1)">为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <img src="NIIabnaeoo3QffxQeyzcddQBnih" width="374" height="174" topLeftX="87" topLeftY="191" alpha="0.85"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="266" bottomOffset="53" presetHandlers="8"/> - </img> - <img src="ICuBbn3tQofEW9xdikZcoghnnyz" width="374" height="174" topLeftX="498" topLeftY="191" alpha="0.85"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="100" bottomOffset="100" presetHandlers="8"/> - </img> - <shape width="472" height="56" topLeftX="244" topLeftY="103" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <shape width="548" height="77" topLeftX="206" topLeftY="37" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>产品功能</p> - </content> - </shape> - <shape width="374" height="44" topLeftX="498" topLeftY="372" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">功能 #2</span> - </p> - </content> - </shape> - <shape width="374" height="56" topLeftX="498" topLeftY="409" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)">单击此处输入你的正文,文字是您思想的提炼</span> - </p> - <p> - <span color="rgba(43, 47, 54, 1)">为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="Nyz2b1635odqLaxRkoEc4ZwXnfc" width="196" height="424" topLeftX="382" topLeftY="59"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EPAEbtakjolYMRxZWboc2BtvnUg" width="217" height="438" topLeftX="372" topLeftY="51"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="260" height="44" topLeftX="608" topLeftY="172" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35"> - <p>功能 #1</p> - </content> - </shape> - <shape width="260" height="56" topLeftX="608" topLeftY="201" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">单击此处输入你的正文,文字是您思想的提炼</span> - </p> - <p> - <span fontSize="12">为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <line startX="564" startY="162" endX="774" endY="162"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="176" startY="388" endX="393" endY="388"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="solid-circle"/> - </line> - <shape width="260" height="44" topLeftX="91" topLeftY="288" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p>功能 #2</p> - </content> - </shape> - <shape width="260" height="56" topLeftX="91" topLeftY="317" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p> - <span fontSize="12">单击此处输入你的正文,文字是您思想的提炼</span> - </p> - <p> - <span fontSize="12">为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ZUPsb9AoMoZJrTxfBrycsE04nzb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="587" height="107" topLeftX="126" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>来自客户的声音</p> - </content> - </shape> - <shape width="115" height="106" topLeftX="23" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DRk9boPBao4Fawxbtpwc6gz0nqf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="Xf3lbN1csoErflxFfXtc2swPnce" width="635" height="426" topLeftX="275" topLeftY="68" alpha="0.15"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="278" height="56" topLeftX="50" topLeftY="356" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="359" height="77" topLeftX="50" topLeftY="287" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="42">主要使用国家</span> - </strong> - </p> - </content> - </shape> - <shape width="8" height="8" topLeftX="348" topLeftY="228" type="ellipse"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </shape> - <shape width="16" height="12" topLeftX="344" topLeftY="211" rotation="180" type="triangle"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </shape> - <shape width="140" height="35" topLeftX="282" topLeftY="177" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p>国家 A</p> - </content> - </shape> - <shape width="8" height="8" topLeftX="584" topLeftY="328" type="ellipse"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </shape> - <shape width="16" height="12" topLeftX="580" topLeftY="311" rotation="180" type="triangle"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </shape> - <shape width="140" height="35" topLeftX="518" topLeftY="277" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">国家 B</span> - </strong> - </p> - </content> - </shape> - <shape width="8" height="8" topLeftX="810" topLeftY="255" type="ellipse"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </shape> - <shape width="16" height="12" topLeftX="806" topLeftY="238" rotation="180" type="triangle"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </shape> - <shape width="140" height="35" topLeftX="744" topLeftY="204" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">国家 C</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DYTDbcVzaocBYbxvvcXcS75Gnze" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="818" height="392" topLeftX="71" topLeftY="74" presetHandlers="12" alpha="0.08" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(66, 24, 21, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="JqvmbzTyPoEp9XxySs1cXck4nyc" width="278" height="368" topLeftX="83" topLeftY="86"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.6" bottomOffset="0.6" presetHandlers="8"/> - </img> - <shape width="482" height="77" topLeftX="382" topLeftY="97" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" fontSize="42">用户反馈</span> - </strong> - </p> - </content> - </shape> - <shape width="193" height="44" topLeftX="382" topLeftY="159" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>FEEDBACK</p> - </content> - </shape> - <shape width="364" height="140" topLeftX="382" topLeftY="220" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - <p lineSpacing="multiple:1.7" letterSpacing="1"/> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="BT3Zb3NHLodP3PxZ7uXcK1NZnHd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="281" height="181" topLeftX="45" topLeftY="278" presetHandlers="8" alpha="0.28" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(232, 134, 125, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="231" height="77" topLeftX="50" topLeftY="83" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" fontSize="42">用户反馈</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="44" topLeftX="50" topLeftY="142" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>FEEDBACK</p> - </content> - </shape> - <shape width="281" height="181" topLeftX="338" topLeftY="83" presetHandlers="8" alpha="0.28" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(232, 134, 125, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="281" height="181" topLeftX="631" topLeftY="83" presetHandlers="8" alpha="0.28" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(232, 134, 125, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <shape width="281" height="181" topLeftX="338" topLeftY="278" presetHandlers="8" alpha="0.28" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(232, 134, 125, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="YSprbZcsRoq7Jjx13qVcghZanoe" width="40" height="40" topLeftX="355" topLeftY="99"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="208" height="44" topLeftX="402" topLeftY="99" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p>用户 #1</p> - </content> - </shape> - <shape width="264" height="74" topLeftX="347" topLeftY="147" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</p> - </content> - </shape> - <img src="QJl8b4OgkoLXNqxLyoUcXalpngg" width="40" height="40" topLeftX="648" topLeftY="103"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="20"/> - </img> - <shape width="208" height="44" topLeftX="694" topLeftY="103" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p lineSpacing="multiple:1.35"> - <span color="rgba(31, 35, 41, 1)">用户 #2</span> - </p> - </content> - </shape> - <shape width="264" height="74" topLeftX="639" topLeftY="151" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</p> - </content> - </shape> - <img src="XluDbd7wcoPQttxUCkicuv8YnLh" width="40" height="40" topLeftX="355" topLeftY="296"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="20"/> - </img> - <shape width="208" height="44" topLeftX="402" topLeftY="296" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p lineSpacing="multiple:1.35"> - <strong> - <span fontSize="18">用户 #4</span> - </strong> - </p> - </content> - </shape> - <shape width="264" height="74" topLeftX="347" topLeftY="344" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</p> - </content> - </shape> - <img src="DX3Lb5lFnowGa8xuAjWchM6dn7e" width="40" height="40" topLeftX="63" topLeftY="296"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="20"/> - </img> - <shape width="208" height="44" topLeftX="109" topLeftY="296" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p lineSpacing="multiple:1.35"> - <span color="rgba(31, 35, 41, 1)">用户 #3</span> - </p> - </content> - </shape> - <shape width="264" height="74" topLeftX="54" topLeftY="344" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</p> - </content> - </shape> - <shape width="281" height="181" topLeftX="631" topLeftY="278" presetHandlers="8" alpha="0.28" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <border color="rgba(232, 134, 125, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="10" angle="54" blur="24" color="rgba(147, 78, 95, 0.76)"/> - </shape> - <img src="HAPPbtkfJoqOvLxVZm6cSo6HnFf" width="40" height="40" topLeftX="648" topLeftY="296"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="20"/> - </img> - <shape width="208" height="44" topLeftX="694" topLeftY="296" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p lineSpacing="multiple:1.35"> - <strong> - <span fontSize="18">用户 #5</span> - </strong> - </p> - </content> - </shape> - <shape width="264" height="74" topLeftX="639" topLeftY="344" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KRmObhqQgoUyBAxPT9UcF2v9n3b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <icon width="55" height="55" topLeftX="50" topLeftY="124" iconType="iconpark/Music/voice.svg"> - <border color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" width="6" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="176" height="38" topLeftX="630" topLeftY="384" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p> - <span fontSize="12"> XXX. 创始人</span> - </p> - </content> - </shape> - <shape width="739" height="149" topLeftX="110" topLeftY="190" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30"> - <p lineSpacing="multiple:1.4"> - <span fontSize="30">如果你做了一件事,结果还不错,那么你应该去做其他精彩的事,不要在上面纠缠太久。只要想清楚下一步是什么</span> - </p> - </content> - </shape> - <shape width="221" height="77" topLeftX="110" topLeftY="113" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1"> - <strong> - <span color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" fontSize="42">用户反馈</span> - </strong> - </p> - </content> - </shape> - <shape width="482" height="77" topLeftX="297" topLeftY="113" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="42">FEEDBACK</span> - </strong> - </p> - </content> - </shape> - <img src="Svapb9omnoLhHdxYWmpcxiwdnGt" width="65" height="65" topLeftX="806" topLeftY="357"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="33"/> - </img> - <shape width="196" height="44" topLeftX="610" topLeftY="357" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="right"> - <p> - <strong> - <span fontSize="16">Jessica Davis</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ZUPsb9AoMoZJrTxfBrycsE04nzb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="587" height="107" topLeftX="126" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>付费计划</p> - </content> - </shape> - <shape width="115" height="106" topLeftX="23" topLeftY="203" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="linear-gradient(150deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)"/> - </fill> - </style> - <data> - <shape width="160" height="377" topLeftX="529" topLeftY="121" presetHandlers="8" alpha="0.6" type="round-rect"> - <fill> - <fillColor color="linear-gradient(330deg,rgba(255, 174, 172, 1) 0%,rgba(255, 230, 200, 1) 100%)"/> - </fill> - <shadow offset="0" blur="21" color="rgba(202, 43, 38, 0.2)"/> - </shape> - <table topLeftX="174" topLeftY="142"> - <colgroup> - <col span="4" width="180"/> - </colgroup> - <tr height="75"> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"/> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="24">免费</span> - </strong> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 64, 58, 1)"> - <p> - <strong> - <span color="rgba(255, 64, 58, 1)" fontSize="24">¥150/ 人月</span> - </strong> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="24">¥500/人月</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="51"> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">标题</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12"> 1 个团队账号</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 64, 58, 1)"> - <p> - <span color="rgba(255, 64, 58, 1)" fontSize="12">5 个团队账号</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" underline="false"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12" underline="false"> 100 个团队账号</span> - </p> - </content> - </td> - </tr> - <tr height="51"> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">标题</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">3 个可保存模板</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 64, 58, 1)"> - <p> - <span color="rgba(255, 64, 58, 1)" fontSize="12">10 个可保存的模板</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" underline="false"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12" underline="false">50 个可保存模板</span> - </p> - </content> - </td> - </tr> - <tr height="51"> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">标题</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">一些资源</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 64, 58, 1)"> - <p> - <span color="rgba(255, 64, 58, 1)" fontSize="12">大量资源</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" underline="false"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12" underline="false">全部资源</span> - </p> - </content> - </td> - </tr> - <tr height="51"> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">标题</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">10 - 50</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 64, 58, 1)"> - <p> - <span color="rgba(255, 64, 58, 1)" fontSize="12">50 -100</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" underline="false"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12" underline="false">100 -500</span> - </p> - </content> - </td> - </tr> - <tr height="51"> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">标题</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">导入 1 款自定义字体</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 64, 58, 1)"> - <p> - <span color="rgba(255, 64, 58, 1)" fontSize="12">导入 3 款自定义字体</span> - </p> - </content> - </td> - <td> - <borderBottom color="rgba(255, 150, 150, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" underline="false"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12" underline="false">导入无限款自定义字体</span> - </p> - </content> - </td> - </tr> - </table> - <shape width="461" height="77" topLeftX="33" topLeftY="33" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">付费计划</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FYWBbVp0toMv72xFHL3cgVrenag" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="691" height="77" topLeftX="134" topLeftY="228" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="linear-gradient(60deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="linear-gradient(60deg,rgba(255, 125, 52, 1) 0%,rgba(255, 110, 29, 1) 2%,rgba(255, 62, 189, 1) 100%)">感谢观看</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/marketing--roadshow_business_plan.xml b/skills/lark-slides/assets/templates/marketing--roadshow_business_plan.xml deleted file mode 100644 index 9d23ca952..000000000 --- a/skills/lark-slides/assets/templates/marketing--roadshow_business_plan.xml +++ /dev/null @@ -1,1506 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>企业路演商业计划书 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF" fontSize="24"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="JcqDbBvoPoSe4SxrfSkcqgSenIf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0.19" alpha="0.75" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="406" height="187" topLeftX="67" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p>企业路演商业计划书</p> - </content> - </shape> - <shape width="138" height="38" topLeftX="79" topLeftY="44" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">宣讲人:李小天</span> - </p> - </content> - </shape> - <shape width="277" height="56" topLeftX="67" topLeftY="261" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">Business Plan</span> - </strong> - </p> - </content> - </shape> - <img src="A8GFbqJiEoHyU8xoOrwcS7z3nRd" width="75" height="103" topLeftX="681" topLeftY="374"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="UaSkbNcnEo6ZkNxiaXEcOLZlnNb" width="75" height="103" topLeftX="744" topLeftY="374"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KmjObsGkfoZ8cTxqrZicrCV3nbd" width="75" height="103" topLeftX="813" topLeftY="374"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ACcEbHOJRoUJiJxGjHTcUj0Ynsd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.7" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="357" height="77" topLeftX="70" topLeftY="82" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>目录 CONTENTS</p> - </content> - </shape> - <img src="IrfWbIyPHo9clbx8inZcrzHfn1c" width="47" height="64" topLeftX="94" topLeftY="383"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="FCqwbdrr3oJmcjxdlKcclQlcnmh" width="47" height="64" topLeftX="133" topLeftY="383"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="FmEzbee5KoX42Kxc50acmsd3n6j" width="47" height="64" topLeftX="176" topLeftY="383"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="260" height="53" topLeftX="562" topLeftY="91" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">企业介绍</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="562" topLeftY="171" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">市场分析</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="562" topLeftY="251" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">运营规划</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="562" topLeftY="331" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">产品服务</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="562" topLeftY="411" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">市场推广</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="510" topLeftY="411" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">05</span> - </p> - </content> - </shape> - <shape width="8" height="62" topLeftX="502" topLeftY="406" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="52" height="53" topLeftX="510" topLeftY="331" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">04</span> - </p> - </content> - </shape> - <shape width="8" height="62" topLeftX="502" topLeftY="326" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="52" height="53" topLeftX="510" topLeftY="251" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">03</span> - </p> - </content> - </shape> - <shape width="8" height="62" topLeftX="502" topLeftY="246" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="52" height="53" topLeftX="510" topLeftY="171" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">02</span> - </p> - </content> - </shape> - <shape width="8" height="62" topLeftX="502" topLeftY="166" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="52" height="53" topLeftX="510" topLeftY="91" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">01</span> - </p> - </content> - </shape> - <shape width="8" height="62" topLeftX="502" topLeftY="86" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="404" height="83" topLeftX="51" topLeftY="399" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true"> - <p> - <span fontSize="42">企业介绍</span> - </p> - </content> - </shape> - <img src="SbxlbPCSporB4fx1Od5cvfxxnBg" width="840" height="292" topLeftX="60" topLeftY="60" contrast="23" temperature="-4"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="188" presetHandlers="10"/> - </img> - <shape width="414" height="44" topLeftX="52" topLeftY="373" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="16">PART 01</span> - </p> - </content> - </shape> - <img src="V0yxb53znojOvOxshfpcZm92nne" width="32" height="44" topLeftX="804" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="THoPbDGDbovqTKxpii8cNOR3nZS" width="32" height="44" topLeftX="831" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="Gpsnbw662opuALx6jn2coywYnPd" width="32" height="44" topLeftX="861" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <img src="IpDgbjYszogAYCx8m4ScKwi0nOc" width="616" height="540" topLeftX="344" topLeftY="0" exposure="22" contrast="-26" saturation="-45" temperature="11"> - <crop type="rect" leftOffset="323" rightOffset="318" topOffset="48" bottomOffset="131" presetHandlers="0"/> - </img> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>企业简介</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>关于我们</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="77" topLeftX="48" topLeftY="64" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>管理团队</p> - </content> - </shape> - <shape width="166" height="44" topLeftX="48" topLeftY="125" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)">Management team</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - <img src="L5KdbfF6noBWYsxF3F5c8ij1npf" width="40" height="55" topLeftX="67" topLeftY="416" alpha="0.15"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="UOirbC1kyoZ3BbxwNjZcu7N4nyc" width="40" height="55" topLeftX="102" topLeftY="416" alpha="0.15"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="XvCEbvwvuoY9IJxTMfccgMZEn5b" width="40" height="55" topLeftX="137" topLeftY="416" alpha="0.15"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="864" height="354" topLeftX="48" topLeftY="132" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left" autoFit="normal-auto-fit"/> - </shape> - <shape width="173" height="77" topLeftX="48" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>发展历程</p> - </content> - </shape> - <shape width="166" height="77" topLeftX="233" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <span color="rgba(147, 150, 156, 1)">History</span> - </p> - </content> - </shape> - <shape width="166" height="56" topLeftX="591" topLeftY="155" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。</p> - </content> - </shape> - <shape width="166" height="56" topLeftX="421" topLeftY="155" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。</p> - </content> - </shape> - <shape width="166" height="56" topLeftX="250" topLeftY="155" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。</p> - </content> - </shape> - <shape width="166" height="56" topLeftX="48" topLeftY="155" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。</p> - </content> - </shape> - <shape width="314" height="40" topLeftX="591" topLeftY="298" type="slides-home-plate"> - <fill> - <fillColor/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span fontSize="18">2026</span> - </strong> - </p> - </content> - </shape> - <line startX="591" startY="162" endX="591" endY="338"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="314" height="40" topLeftX="421" topLeftY="347" type="slides-home-plate"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">2025</span> - </strong> - </p> - </content> - </shape> - <line startX="421" startY="162" endX="421" endY="386"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="314" height="40" topLeftX="250" topLeftY="397" type="slides-home-plate"> - <fill> - <fillColor/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span fontSize="18">2024</span> - </strong> - </p> - </content> - </shape> - <line startX="250" startY="162" endX="250" endY="436"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="314" height="40" topLeftX="48" topLeftY="446" type="slides-home-plate"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">2023</span> - </strong> - </p> - </content> - </shape> - <line startX="48" startY="162" endX="48" endY="485"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="227" startY="51" endX="227" endY="85"> - <border color="rgba(222, 224, 227, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="173" height="77" topLeftX="48" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>企业优势</p> - </content> - </shape> - <shape width="236" height="77" topLeftX="233" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(147, 150, 156, 1)" bold="true"> - <p>Advantages</p> - </content> - </shape> - <line startX="227" startY="51" endX="227" endY="85"> - <border color="rgba(222, 224, 227, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="315" height="315" topLeftX="68" topLeftY="157" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="315" height="315" topLeftX="322" topLeftY="157" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="315" height="315" topLeftX="577" topLeftY="157" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="189" height="56" topLeftX="131" topLeftY="212" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">人才优势</span> - </p> - </content> - </shape> - <shape width="166" height="128" topLeftX="142" topLeftY="270" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="189" height="56" topLeftX="385" topLeftY="212" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="center"> - <p>资源优势</p> - </content> - </shape> - <shape width="166" height="128" topLeftX="397" topLeftY="270" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="189" height="56" topLeftX="640" topLeftY="212" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="center"> - <p>技术优势</p> - </content> - </shape> - <shape width="166" height="128" topLeftX="651" topLeftY="270" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="864" height="354" topLeftX="48" topLeftY="132" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left" autoFit="normal-auto-fit"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="404" height="83" topLeftX="51" topLeftY="399" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true"> - <p> - <span fontSize="42">市场分析</span> - </p> - </content> - </shape> - <img src="VUWIbYM9ioBh3lxRC25c7BcfnJg" width="840" height="292" topLeftX="60" topLeftY="60"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="11" bottomOffset="177" presetHandlers="10"/> - </img> - <shape width="414" height="44" topLeftX="52" topLeftY="373" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="16">PART 02</span> - </p> - </content> - </shape> - <img src="ZPrtbCEOroAflgxvB8lcrvHLnXf" width="32" height="44" topLeftX="804" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="V8GDbiluWomyBHxgz3icDV6bnPb" width="32" height="44" topLeftX="831" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="GQiab1MGto3fDTxPjxRclIXcnze" width="32" height="44" topLeftX="861" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>市场分析</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>市场现状</p> - </content> - </shape> - <shape width="74" height="74" topLeftX="401" topLeftY="44" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="22">01</span> - </strong> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="687" topLeftY="44" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="22">02</span> - </strong> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="401" topLeftY="292" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="22">03</span> - </strong> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="687" topLeftY="292" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="22">04</span> - </strong> - </p> - </content> - </shape> - <line startX="388" startY="270" endX="928" endY="270"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="658" startY="31" endX="658" endY="509"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="198" height="92" topLeftX="401" topLeftY="134" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="198" height="92" topLeftX="687" topLeftY="134" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="198" height="92" topLeftX="401" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="198" height="92" topLeftX="687" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>市场分析</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>用户需求</p> - </content> - </shape> - <shape width="343" height="56" topLeftX="397" topLeftY="100" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="457" topLeftY="47" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">需求 #1</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="416" topLeftY="46" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">01</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="408" topLeftY="54" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="343" height="56" topLeftX="397" topLeftY="252" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="457" topLeftY="199" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">需求 #2</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="416" topLeftY="198" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">02</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="408" topLeftY="206" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="343" height="56" topLeftX="397" topLeftY="404" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="260" height="53" topLeftX="457" topLeftY="351" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">需求 #3</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="416" topLeftY="350" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">03</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="408" topLeftY="358" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="404" height="83" topLeftX="51" topLeftY="399" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true"> - <p> - <span fontSize="42">运营规划</span> - </p> - </content> - </shape> - <img src="IgP0bewicodxAAxE7w3cvrUgnJg" width="840" height="292" topLeftX="60" topLeftY="60"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="188" bottomOffset="0" presetHandlers="10"/> - </img> - <shape width="414" height="44" topLeftX="52" topLeftY="373" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="16">PART 03</span> - </p> - </content> - </shape> - <img src="FuUtbHvZworNpOxFLwZcLTI2nqd" width="32" height="44" topLeftX="804" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="CiTtbmeIWom1iOx5lf1c4Tf9nNH" width="32" height="44" topLeftX="831" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="UYkBbFRuVo7Gc4x1qc3cv9EhnoM" width="32" height="44" topLeftX="861" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <img src="EMuAbY1b3oNTttx9mdfcqa3RnRS" width="196" height="289" topLeftX="683" topLeftY="53"> - <crop type="rect" leftOffset="173" rightOffset="344" topOffset="106" bottomOffset="12" presetHandlers="0"/> - </img> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>市场分析</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>用户需求</p> - </content> - </shape> - <shape width="196" height="92" topLeftX="424" topLeftY="418" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="136" height="53" topLeftX="484" topLeftY="365" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">C端模式</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="443" topLeftY="364" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">01</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="435" topLeftY="372" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="196" height="92" topLeftX="683" topLeftY="418" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="136" height="53" topLeftX="743" topLeftY="365" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">B端模式</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="703" topLeftY="364" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">02</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="695" topLeftY="372" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <img src="U7vbbhWkCofH9oxsvjxccnyYnDd" width="196" height="289" topLeftX="424" topLeftY="53"> - <crop type="rect" leftOffset="225" rightOffset="374" topOffset="165" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="173" height="77" topLeftX="48" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>运营计划</p> - </content> - </shape> - <shape width="237" height="77" topLeftX="233" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(147, 150, 156, 1)" bold="true"> - <p>Plan</p> - </content> - </shape> - <line startX="227" startY="51" endX="227" endY="85"> - <border color="rgba(222, 224, 227, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="722" height="56" topLeftX="48" topLeftY="395" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="left"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="205" height="64" topLeftX="686" topLeftY="221" type="slides-chevron"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <border color="rgba(32, 177, 78, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">阶段四</span> - </p> - </content> - </shape> - <line startX="714" startY="184" endX="714" endY="213"> - <border color="rgba(147, 150, 156, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="690" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.11.11</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="696" topLeftY="297" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>活动描述</p> - </content> - </shape> - <shape width="205" height="64" topLeftX="487" topLeftY="221" type="slides-chevron"> - <border color="rgba(147, 150, 156, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)">阶段三</span> - </p> - </content> - </shape> - <line startX="516" startY="184" endX="516" endY="213"> - <border color="rgba(147, 150, 156, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="491" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.06.18</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="497" topLeftY="297" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="left"> - <p> - <span color="rgba(147, 150, 156, 1)">活动描述</span> - </p> - </content> - </shape> - <shape width="205" height="64" topLeftX="289" topLeftY="221" type="slides-chevron"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <border color="rgba(32, 177, 78, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">阶段二</span> - </p> - </content> - </shape> - <line startX="318" startY="184" endX="318" endY="213"> - <border color="rgba(147, 150, 156, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="293" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.02.14</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="299" topLeftY="297" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p>活动描述</p> - </content> - </shape> - <shape width="205" height="64" topLeftX="91" topLeftY="221" type="slides-chevron"> - <border color="rgba(147, 150, 156, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)">阶段一</span> - </p> - </content> - </shape> - <line startX="120" startY="184" endX="120" endY="213"> - <border color="rgba(147, 150, 156, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="99" height="38" topLeftX="95" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2026.01.01</span> - </p> - </content> - </shape> - <shape width="99" height="38" topLeftX="101" topLeftY="297" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="left"> - <p> - <span color="rgba(147, 150, 156, 1)">活动描述</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="404" height="83" topLeftX="51" topLeftY="399" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true"> - <p> - <span fontSize="42">产品服务</span> - </p> - </content> - </shape> - <img src="Wqo3bpxNzoO4XvxjQg7cKTiJnGf" width="840" height="292" topLeftX="60" topLeftY="60"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="94" bottomOffset="94" presetHandlers="10"/> - </img> - <shape width="414" height="44" topLeftX="52" topLeftY="373" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="16">PART 04</span> - </p> - </content> - </shape> - <img src="IOxGbeOSAoJEaMxpBM4cNz3Jnxe" width="32" height="44" topLeftX="804" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="RSpUbiA5Bo4eXbx0TbEcYbY8nCq" width="32" height="44" topLeftX="831" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="MvU1bBL22oVsirxVJBbcRsdEnzh" width="32" height="44" topLeftX="861" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <img src="NvJcbWFtfou7pexBmdXcwIKan4g" width="220" height="452" topLeftX="401" topLeftY="49"> - <crop type="rect" leftOffset="294" rightOffset="294" topOffset="0" bottomOffset="0" presetHandlers="42"/> - </img> - <img src="OGpRbofdyoDjDWxGuVtcTN2ynJc" width="258" height="492" topLeftX="381" topLeftY="29"> - <crop type="rect" leftOffset="89" rightOffset="88" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>产品服务</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>用户需求</p> - </content> - </shape> - <shape width="291" height="74" topLeftX="646" topLeftY="113" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="224" height="53" topLeftX="706" topLeftY="60" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">产品 #1</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="665" topLeftY="60" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">01</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="657" topLeftY="67" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="198" height="56" topLeftX="720" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="62" height="62" topLeftX="652" topLeftY="251" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="667" topLeftY="265" iconType="iconpark/Base/save-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="198" height="56" topLeftX="720" topLeftY="345" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="62" height="62" topLeftX="652" topLeftY="342" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="667" topLeftY="356" iconType="iconpark/Office/envelope-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>产品服务</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>产品展示</p> - </content> - </shape> - <shape width="342" height="56" topLeftX="567" topLeftY="424" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="224" height="53" topLeftX="445" topLeftY="425" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">产品 #2</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="404" topLeftY="425" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">02</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="396" topLeftY="432" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <img src="V8ITbQgCNoorPDxcygjcS5UxnEc" width="542" height="320" topLeftX="375" topLeftY="71"> - <shadow blur="24" color="rgba(0, 0, 0, 0.21)"/> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="APRIb5hn4ovJqXxcbvtcRfYYnkg" width="441" height="247" topLeftX="427" topLeftY="88"> - <crop type="rect" leftOffset="0.12" rightOffset="0.12" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="404" height="83" topLeftX="51" topLeftY="399" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true"> - <p> - <span fontSize="42">市场推广</span> - </p> - </content> - </shape> - <img src="BNA9bqKYxorfvax1NNUcaKCLnhd" width="840" height="292" topLeftX="60" topLeftY="60" saturation="-35" temperature="5"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="94" bottomOffset="94" presetHandlers="10"/> - </img> - <shape width="414" height="44" topLeftX="52" topLeftY="373" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="16">PART 05</span> - </p> - </content> - </shape> - <img src="Hb2DbF35BoOy6mxA1o2cz2rUnpd" width="32" height="44" topLeftX="804" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="VbNPbwJewoR6pdxla8Scf9YdnDf" width="32" height="44" topLeftX="831" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - <img src="ApBXbutsSoxDnuxofz2crkkenNd" width="32" height="44" topLeftX="861" topLeftY="420" alpha="0.7"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="173" height="77" topLeftX="48" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>运营计划</p> - </content> - </shape> - <shape width="236" height="77" topLeftX="233" topLeftY="30" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(147, 150, 156, 1)" bold="true"> - <p>Plan</p> - </content> - </shape> - <line startX="227" startY="51" endX="227" endY="85"> - <border color="rgba(222, 224, 227, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="160" height="92" topLeftX="132" topLeftY="389" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="132" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键词 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="195" height="195" topLeftX="114" topLeftY="137" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <border color="rgba(32, 177, 78, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="56" height="56" topLeftX="184" topLeftY="207" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="160" height="92" topLeftX="311" topLeftY="389" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="92" topLeftX="490" topLeftY="389" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="92" topLeftX="669" topLeftY="389" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="669" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键词 #4</span> - </strong> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="490" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键词 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="160" height="44" topLeftX="311" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)">关键词 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="195" height="195" topLeftX="293" topLeftY="137" type="ellipse"> - <fill> - <fillColor/> - </fill> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="195" height="195" topLeftX="472" topLeftY="137" type="ellipse"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - <border color="rgba(32, 177, 78, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="56" height="56" topLeftX="363" topLeftY="207" iconType="iconpark/Travel/earth.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="56" height="56" topLeftX="542" topLeftY="207" iconType="iconpark/Charts/chart-proportion.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="195" height="195" topLeftX="651" topLeftY="137" type="ellipse"> - <fill> - <fillColor/> - </fill> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="56" height="56" topLeftX="721" topLeftY="207" iconType="iconpark/Travel/parachute.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="345" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="291" height="128" topLeftX="28" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="291" height="38" topLeftX="27" topLeftY="472" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>市场推广</p> - </content> - </shape> - <shape width="291" height="56" topLeftX="28" topLeftY="40" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p>市场目标</p> - </content> - </shape> - <shape width="260" height="74" topLeftX="419" topLeftY="361" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="196" height="53" topLeftX="479" topLeftY="308" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">线下销售</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="439" topLeftY="308" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">02</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="430" topLeftY="315" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="260" height="74" topLeftX="419" topLeftY="171" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="200" height="53" topLeftX="479" topLeftY="118" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true"> - <p> - <span fontSize="22">线上引流</span> - </p> - </content> - </shape> - <shape width="52" height="53" topLeftX="439" topLeftY="117" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="22">01</span> - </p> - </content> - </shape> - <shape width="8" height="38" topLeftX="430" topLeftY="125" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="129" height="140" topLeftX="747" topLeftY="105" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" bold="true"> - <p> - <span fontSize="80">64</span> - </p> - </content> - </shape> - <shape width="42" height="53" topLeftX="860" topLeftY="167" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="false"> - <p> - <span fontSize="22" bold="false">%</span> - </p> - </content> - </shape> - <img src="JOx2btdhloFP5sx1F8scoMIln7b" width="17" height="23" topLeftX="727" topLeftY="186" rotation="270" alpha="0.7"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0"/> - </img> - <img src="BOXcbG8n8orE7IxUJASchZJ4nNb" width="17" height="23" topLeftX="727" topLeftY="170" rotation="270" alpha="0.7"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0"/> - </img> - <shape width="129" height="140" topLeftX="747" topLeftY="295" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" bold="true"> - <p> - <span fontSize="80">24</span> - </p> - </content> - </shape> - <shape width="42" height="53" topLeftX="860" topLeftY="358" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="false"> - <p> - <span fontSize="22" bold="false">%</span> - </p> - </content> - </shape> - <img src="NISibfU3ao1hIPx6wGUc5zuqnwb" width="17" height="23" topLeftX="727" topLeftY="376" rotation="270" alpha="0.7"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0"/> - </img> - <img src="GBJtbHctBot1abxgyZJc9Qfbnaf" width="17" height="23" topLeftX="727" topLeftY="361" rotation="270" alpha="0.7"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="JcqDbBvoPoSe4SxrfSkcqgSenIf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0.19" alpha="0.75" type="rect"> - <fill> - <fillColor color="rgba(32, 177, 78, 1)"/> - </fill> - </shape> - <shape width="413" height="104" topLeftX="67" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p>感谢您的观看</p> - </content> - </shape> - <shape width="138" height="38" topLeftX="79" topLeftY="44" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">宣讲人:李小天</span> - </p> - </content> - </shape> - <shape width="277" height="56" topLeftX="67" topLeftY="179" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">Thank you</span> - </strong> - </p> - </content> - </shape> - <img src="SVIJbQrC7o2H2AxOuEUcFYDGnGb" width="75" height="103" topLeftX="681" topLeftY="374"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="CBg9bBy3qo9USrxdMfgc8dyRnkf" width="75" height="103" topLeftX="744" topLeftY="374"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="QtB5bvgsFo7hnAxM07tcSSGCn4e" width="75" height="103" topLeftX="813" topLeftY="374"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/misc--book_sharing.xml b/skills/lark-slides/assets/templates/misc--book_sharing.xml deleted file mode 100644 index 8276c3655..000000000 --- a/skills/lark-slides/assets/templates/misc--book_sharing.xml +++ /dev/null @@ -1,1338 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>读书分享 - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -

- -

-
-
- - -

作者简介

-
- -
- - -

关键标题

-
-
- - -

请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明

-
-
- - - - - -

基本信息

-
-
- - -

关键标题

-
-
- - -

请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明

-
-
- - - - - -

生平经历

-
-
- - -

关键标题

-
-
- - -

请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明

-
-
- - - - - -

文学成就

-
-
-
- - - -
- - - - - - - - -

重点观点一

-
-
- - - - - - - - - - - -

重点观点二

-
-
- - - - - -

重点观点二

-
-
- - - - - -

请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明

-
-
- - -

请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明

-
-
- - -

请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明请输入详细说明

-
-
- - -

重点观点

-
-
- - - - - - - - - - - - -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。在书的世界里,我们汲取智慧,分享感悟,让书香飘满生活,让心灵在阅读中绽放光芒。

-
-
- - -

启发二

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

启发一

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

启发

-
-
- - -

-
-
-
- - - -
- - - - - - - - - - - -

重点一

-
-
- - - - - -

重点二

-
-
- - - - - -

重点三

-
-
- - - - - - - - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

运用与

-

实践

-
-
- - -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - -

感悟一

-
-
- - - - - -

感悟二

-
-
- - - - - -

感悟二

-
-
- - - - - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

读书感悟

-
-
- - -

-
-
-
- - - -
- - - - - - - - -

总结一

-
-
- - - - - -

总结二

-
-
- - - - - - - - - - - - - - - - - - - - - - - - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

书海畅游意无穷,墨香四溢映心中。分享佳作如明灯,照亮前路启智明。佳句共赏添雅趣,思想碰撞智慧生。读书之乐同分享,知识海洋任君行。

-
-
- - -

-
-
- - -

总结

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - 社团活动 - -

-

- - 策划方案 - -

-
-
- - -

- 社团名称 -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 策划人: 小李 -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - 04 - -

-
-
- - -

- - 03 - -

-
-
- - -

- 活动内容 -

-
-
- - -

- - 01 - -

-
-
- - -

- 活动介绍 -

-
-
- - -

- 输入活动介绍的相关信息 -

-
-
- - -

- 输入活动内容的相关信息 -

-
-
- - -

- - 02 - -

-
-
- - -

- 活动安排 -

-
-
- - -

- 输入活动安排的相关信息 -

-
-
- - -

- 活动维护 -

-
-
- - -

- 输入活动维护的相关信息 -

-
-
- - -

- Category -

-
-
- - -

- - 目录 - -

-
-
- - -

- 社团名称 -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - 01 - -

-
-
- - -

- Activity description -

-
-
- - -

- - 活动介绍 - -

-
-
-
- - - -
- - - - - -

- Preparatory Preparations -

-
-
- - -

- - 前期筹备 - -

-
-
- - - - - - - -

- - 主题策划 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - - - - - - - - - - - - - - - - -

- - 人员邀请 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - - - - - - - - - - - -

现场布置

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- Activity budge -

-
-
- - -

- - 活动经费 - -

-
-
- - -

- - 其他支出 - -

-
-
- - -

- ¥ 100 -

-
-
- - - - - - - - - - -

- - 食品饮料 - -

-
-
- - -

- ¥ 220 -

-
-
- - - - - - - - - - -

- - 活动奖品 - -

-
-
- - -

- ¥ 300 -

-
-
- - - - - - - - - - -

- - 酒店住宿 - -

-
-
- - -

- ¥ 500 -

-
-
- - - - - - - - - - -

- - 交通出行 - -

-
-
- - -

- ¥ 150 -

-
-
- - - - - - - - - - -

- - 医疗保险 - -

-
-
- - -

- ¥ 90 -

-
-
- - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

02

-
-
- - -

- Activity content -

-
-
- - -

- - 活动内容 - -

-
-
-
- - - -
- - - - - -

- Guests of Activity -

-
-
- - -

- - 活动嘉宾 - -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 活动宣传负责人 -

-
-
- - -

- - 王大 - -

-
-
- - - - - - - - - - - - -

- 文案负责人 -

-
-
- - -

- - 李小画 - -

-
-
- - - - - - - - - - - - - - - -

- 场地布置负责人 -

-
-
- - -

- - 林克 - -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 流程策划负责人 -

-
-
- - -

- - 张小可 - -

-
-
-
- - - -
- - - - - -

- Activity projects -

-
-
- - -

- - 活动项目 - -

-
-
- - - - - - - - - - - - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 项目一 -

-
-
- - - - - -

- 输入详细的活动内容 -

-
-
- - - - - - - -

- - 项目三 - -

-
-
- - - - - -

- 输入详细的活动内容 -

-
-
- - - - - - - -

- - 项目二 - -

-
-
- - - - - -

- 输入详细的活动内容 -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

03

-
-
- - -

- Activity arrange -

-
-
- - -

- - 活动安排 - -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - 嘉宾颁奖 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的。 -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的。 -

-
-
- - -

- - 嘉宾分享 - -

-
-
- - -

- - 自由活动 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的。 -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的。 -

-
-
- - -

- - 登记入场 - -

-
-
- - -

- Execution flow -

-
-
- - -

- - 执行流程 - -

-
-
-
- - - -
- - - - - -

- Emergency response plan -

-
-
- - -

- - 应急预案 - -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 应急预案一 -

-
-
- - -

- 应急预案二 -

-
-
- - -

- 应急预案三 -

-
-
- - - - - - - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

04

-
-
- - -

- Activity maintain -

-
-
- - -

- - 活动评估 - -

-
-
-
- - - -
- - - - - -

- Activity Results -

-
-
- - -

- - 活动成果 - -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

成果一

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - -

- - 成果二 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - -

- - 成果四 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - -

- - 成果三 - -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。 -

-
-
- - - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 总结二 -

-
-
- - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。大多数时候,他们都是在观众面前。 -

-
-
- - - - - - - -

- 演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。大多数时候,他们都是在观众面前。 -

-
-
- - - - - - - -

- 总结一 -

-
-
- - -

- Summary -

-
-
- - -

- - 总结 - -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 谢谢观看 -

-
-
- - -

- Thank you! -

-
-
-
- - - -
- \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/misc--student_career_plan.xml b/skills/lark-slides/assets/templates/misc--student_career_plan.xml deleted file mode 100644 index 3632d7237..000000000 --- a/skills/lark-slides/assets/templates/misc--student_career_plan.xml +++ /dev/null @@ -1,1854 +0,0 @@ - - 学生职业生涯规划 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="296" height="296" topLeftX="125" topLeftY="122" type="ellipse"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="259" height="260" topLeftX="-340" topLeftY="140" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="130" height="130" topLeftX="-340" topLeftY="270" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <line startX="567" startY="-1" endX="462" endY="122" alpha="0.6"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="552" startY="34" endX="480" endY="118" alpha="0.6"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="468" startY="293" endX="316" endY="471" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="469" startY="312" endX="396" endY="399" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="404" height="68" topLeftX="129" topLeftY="276" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="false"> - <p>Career Planning</p> - </content> - <shadow offset="4" angle="90" blur="20" color="rgba(0, 0, 0, 0.06)"/> - </shape> - <shape width="668" height="101" topLeftX="129" topLeftY="195" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>大学生职业发展规划</p> - </content> - <shadow offset="4" angle="90" blur="20" color="rgba(0, 0, 0, 0.06)"/> - </shape> - <shape width="355" height="44" topLeftX="41" topLeftY="46" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false"> - <p>XX大学学生发展中心</p> - </content> - </shape> - <shape width="130" height="44" topLeftX="41" topLeftY="450" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false"> - <p>主讲人:XXX</p> - </content> - </shape> - <shape width="73" height="44" topLeftX="834" topLeftY="46" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)">LOGO</span> - </p> - </content> - </shape> - <shape width="44" height="10" topLeftX="855" topLeftY="462" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="44" height="10" topLeftX="855" topLeftY="462" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="546" height="460" topLeftX="376" topLeftY="40" presetHandlers="16" type="rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="72" height="68" topLeftX="456" topLeftY="90" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">01</span> - </strong> - </p> - </content> - </shape> - <shape width="284" height="53" topLeftX="517" topLeftY="98" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="22">自我认知</span> - </strong> - </p> - </content> - </shape> - <shape width="284" height="41" topLeftX="517" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(234, 234, 234, 1)" bold="false"> - <p> - <span color="rgba(234, 234, 234, 1)" fontSize="14" bold="false">KNOW YOURSELF</span> - </p> - </content> - </shape> - <shape width="72" height="68" topLeftX="456" topLeftY="182" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">02</span> - </strong> - </p> - </content> - </shape> - <shape width="284" height="53" topLeftX="517" topLeftY="189" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">行业认知</span> - </p> - </content> - </shape> - <shape width="284" height="41" topLeftX="517" topLeftY="226" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(234, 234, 234, 1)" bold="false"> - <p> - <span color="rgba(234, 234, 234, 1)" fontSize="14" bold="false">CAREER COGNITION</span> - </p> - </content> - </shape> - <shape width="72" height="68" topLeftX="456" topLeftY="273" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">03</span> - </strong> - </p> - </content> - </shape> - <shape width="284" height="53" topLeftX="517" topLeftY="280" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">职业定位</span> - </p> - </content> - </shape> - <shape width="284" height="41" topLeftX="517" topLeftY="317" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(234, 234, 234, 1)" bold="false"> - <p> - <span color="rgba(234, 234, 234, 1)">Career positioning</span> - </p> - </content> - </shape> - <shape width="72" height="68" topLeftX="456" topLeftY="365" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">04</span> - </strong> - </p> - </content> - </shape> - <shape width="284" height="53" topLeftX="517" topLeftY="372" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">实施计划</span> - </p> - </content> - </shape> - <shape width="284" height="41" topLeftX="517" topLeftY="409" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(234, 234, 234, 1)" bold="false"> - <p> - <span color="rgba(234, 234, 234, 1)" fontSize="14" bold="false">IMPLEMENT PLAN</span> - </p> - </content> - </shape> - <shape width="32" height="28" topLeftX="180" topLeftY="147" rotation="30" type="triangle"> - <border color="rgba(100, 237, 255, 1)" width="10" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="74" height="74" topLeftX="77" topLeftY="73" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="326" height="71" topLeftX="95" topLeftY="84" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">目录</span> - </p> - </content> - <shadow offset="4" angle="90" blur="12" color="rgba(0, 0, 0, 0.08)"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="64" height="385" topLeftX="760" topLeftY="324" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="338" height="419" topLeftX="801" topLeftY="290" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="404" topLeftY="169" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <line startX="83" startY="180" endX="14" endY="263" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="79" startY="198" endX="57" endY="224" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="416" startY="-190" endX="350" endY="-113" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="389" startY="-173" endX="363" endY="-143" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="64" height="432" topLeftX="875" topLeftY="182" type="rect"> - <fill> - <fillColor color="rgba(215, 163, 201, 1)"/> - </fill> - </shape> - <shape width="338" height="466" topLeftX="916" topLeftY="148" type="rect"> - <fill> - <fillColor color="rgba(215, 163, 201, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="486" topLeftY="74" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(215, 163, 201, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="138" height="125" topLeftX="65" topLeftY="66" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="70" color="rgba(248, 206, 56, 1)" bold="true"> - <p>01</p> - </content> - </shape> - <shape width="737" height="77" topLeftX="63" topLeftY="372" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="44" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3"> - <p>自我认知</p> - </content> - </shape> - <shape width="328" height="46" topLeftX="65" topLeftY="436" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="17" color="rgba(145, 144, 168, 1)"> - <p>KNOW YOURSELF</p> - </content> - </shape> - <img src="UANBb22iFo5JGuxZAO6cQ0LCnOh" width="441" height="412" topLeftX="519" topLeftY="128"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="5" bottomOffset="29" presetHandlers="15"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="167" height="44" topLeftX="755" topLeftY="53" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>LOGO</p> - </content> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>个人背景</p> - </content> - </shape> - <shape width="885" height="327" topLeftX="38" topLeftY="173" presetHandlers="20" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="154" height="135" topLeftX="148" topLeftY="240" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">现在就开始打字吧,写下任何你想表达的内容。用简洁明了的语言来传达你的想法,结合图像和图表,让你的观众更好地理解和记住你的演示。</span> - </p> - </content> - </shape> - <shape width="154" height="44" topLeftX="148" topLeftY="208" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(234, 234, 234, 1)" bold="true"> - <p> - <strong> - <span color="rgba(234, 234, 234, 1)" fontSize="16">专业技能</span> - </strong> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="71" topLeftY="210" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <icon width="42" height="42" topLeftX="87" topLeftY="226" iconType="iconpark/Base/tool.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="154" height="135" topLeftX="441" topLeftY="240" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">现在就开始打字吧,写下任何你想表达的内容。用简洁明了的语言来传达你的想法,结合图像和图表,让你的观众更好地理解和记住你的演示。</span> - </p> - </content> - </shape> - <shape width="154" height="44" topLeftX="441" topLeftY="208" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(234, 234, 234, 1)" bold="true"> - <p> - <span fontSize="16">教育背景</span> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="363" topLeftY="210" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <icon width="42" height="42" topLeftX="379" topLeftY="226" iconType="iconpark/Office/book-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="154" height="135" topLeftX="733" topLeftY="240" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">现在就开始打字吧,写下任何你想表达的内容。用简洁明了的语言来传达你的想法,结合图像和图表,让你的观众更好地理解和记住你的演示。</span> - </p> - </content> - </shape> - <shape width="154" height="44" topLeftX="733" topLeftY="208" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(234, 234, 234, 1)" bold="true"> - <p> - <span fontSize="16">获奖经历</span> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="656" topLeftY="210" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <icon width="42" height="42" topLeftX="672" topLeftY="226" iconType="iconpark/Base/config.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <line startX="333" startY="201" endX="333" endY="472" alpha="0.4"> - <border color="rgba(222, 224, 227, 0.8)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="625" startY="201" endX="625" endY="472" alpha="0.4"> - <border color="rgba(222, 224, 227, 0.8)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <img src="JXhjb7HM3oI3RpxUtYcc0EgnnEd" width="202" height="202" topLeftX="273" topLeftY="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="VbI1bwroaoADdcxxAK8cbHbVnue" width="202" height="202" topLeftX="475" topLeftY="68"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="185" height="56" topLeftX="290" topLeftY="150" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="185" height="56" topLeftX="290" topLeftY="150" rotation="270" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="225" height="51" topLeftX="460" topLeftY="342" rotation="315" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="225" height="51" topLeftX="460" topLeftY="342" rotation="225" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="54" height="54" topLeftX="78" topLeftY="428" type="donut"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="32" height="28" topLeftX="846" topLeftY="64" rotation="40" type="triangle"> - <border color="rgba(251, 142, 241, 1)" width="10" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="200" height="97" topLeftX="68" topLeftY="125" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示。所以,让我们开始吧,展示你的想法和知识吧!</span> - </p> - </content> - </shape> - <shape width="116" height="42" topLeftX="68" topLeftY="73" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="116" height="44" topLeftX="68" topLeftY="73" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>个人性格</p> - </content> - </shape> - <shape width="200" height="97" topLeftX="700" topLeftY="382" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示。所以,让我们开始吧,展示你的想法和知识吧!</span> - </p> - </content> - </shape> - <shape width="116" height="42" topLeftX="700" topLeftY="331" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="116" height="44" topLeftX="700" topLeftY="330" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>职业性格</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="64" height="385" topLeftX="760" topLeftY="324" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="338" height="419" topLeftX="801" topLeftY="290" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="404" topLeftY="169" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <line startX="83" startY="180" endX="14" endY="263" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="79" startY="198" endX="57" endY="224" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="416" startY="-190" endX="350" endY="-113" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="389" startY="-173" endX="363" endY="-143" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="64" height="432" topLeftX="875" topLeftY="182" type="rect"> - <fill> - <fillColor color="rgba(251, 202, 227, 1)"/> - </fill> - </shape> - <shape width="338" height="466" topLeftX="916" topLeftY="148" type="rect"> - <fill> - <fillColor color="rgba(251, 202, 227, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="486" topLeftY="74" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(251, 202, 227, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="R6RabwEXIonZtUxf9U1c2s4qnVg" width="474" height="438" topLeftX="486" topLeftY="102"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="18" bottomOffset="18" presetHandlers="2"/> - </img> - <shape width="138" height="125" topLeftX="65" topLeftY="66" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="70" color="rgba(248, 206, 56, 1)" bold="true"> - <p>02</p> - </content> - </shape> - <shape width="737" height="77" topLeftX="63" topLeftY="372" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="44" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3"> - <p>行业认知</p> - </content> - </shape> - <shape width="328" height="46" topLeftX="65" topLeftY="436" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="17" color="rgba(145, 144, 168, 1)"> - <p>CAREER COGNITION</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>职业价值观</p> - </content> - </shape> - <shape width="452" height="115" topLeftX="446" topLeftY="365" presetHandlers="20" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="332" height="58" topLeftX="552" topLeftY="412" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="332" height="50" topLeftX="552" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>享受型</p> - </content> - </shape> - <shape width="80" height="80" topLeftX="460" topLeftY="382" type="ellipse"> - <fill> - <fillColor color="rgba(66, 59, 152, 1)"/> - </fill> - </shape> - <icon width="42" height="42" topLeftX="479" topLeftY="401" iconType="iconpark/Game/game-handle.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="452" height="115" topLeftX="446" topLeftY="73" presetHandlers="20" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="332" height="58" topLeftX="552" topLeftY="120" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="332" height="50" topLeftX="552" topLeftY="82" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>志愿型</p> - </content> - </shape> - <shape width="80" height="80" topLeftX="460" topLeftY="90" type="ellipse"> - <fill> - <fillColor color="rgba(66, 59, 152, 1)"/> - </fill> - </shape> - <icon width="42" height="42" topLeftX="479" topLeftY="109" iconType="iconpark/Base/tips.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="452" height="115" topLeftX="446" topLeftY="219" presetHandlers="20" type="round-rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="332" height="58" topLeftX="552" topLeftY="266" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="332" height="50" topLeftX="552" topLeftY="228" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">自由型</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="80" topLeftX="461" topLeftY="236" alpha="0.4" type="ellipse"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <icon width="42" height="42" topLeftX="480" topLeftY="255" iconType="iconpark/Others/magic.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="6" height="6" topLeftX="146" topLeftY="434" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="165" topLeftY="434" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="127" topLeftY="434" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="108" topLeftY="434" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="89" topLeftY="434" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="71" topLeftY="434" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="71" topLeftY="454" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="71" topLeftY="473" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="89" topLeftY="454" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="89" topLeftY="473" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="108" topLeftY="454" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="108" topLeftY="473" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="127" topLeftY="454" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="127" topLeftY="473" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="165" topLeftY="454" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="165" topLeftY="473" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="146" topLeftY="454" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="146" topLeftY="473" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="167" height="44" topLeftX="755" topLeftY="53" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>LOGO</p> - </content> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>环境分析</p> - </content> - </shape> - <shape width="404" height="115" topLeftX="63" topLeftY="362" presetHandlers="16" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="6" height="81" topLeftX="73" topLeftY="379" presetHandlers="3" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="370" height="58" topLeftX="83" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="370" height="50" topLeftX="83" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>社会环境</p> - </content> - </shape> - <shape width="404" height="115" topLeftX="493" topLeftY="362" presetHandlers="16" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="370" height="58" topLeftX="513" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="370" height="50" topLeftX="513" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>职业环境</p> - </content> - </shape> - <shape width="6" height="81" topLeftX="503" topLeftY="379" presetHandlers="3" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="404" height="115" topLeftX="63" topLeftY="217" presetHandlers="16" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="6" height="81" topLeftX="73" topLeftY="234" presetHandlers="3" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - <shape width="370" height="58" topLeftX="83" topLeftY="264" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="370" height="50" topLeftX="83" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>家庭环境</p> - </content> - </shape> - <shape width="404" height="115" topLeftX="493" topLeftY="217" presetHandlers="16" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="370" height="58" topLeftX="513" topLeftY="264" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="370" height="50" topLeftX="513" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>学校环境</p> - </content> - </shape> - <shape width="6" height="81" topLeftX="503" topLeftY="234" presetHandlers="3" type="rect"> - <fill> - <fillColor color="rgba(100, 237, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="64" height="385" topLeftX="760" topLeftY="324" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="338" height="419" topLeftX="801" topLeftY="290" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="404" topLeftY="169" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <line startX="83" startY="180" endX="14" endY="263" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="79" startY="198" endX="57" endY="224" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="416" startY="-190" endX="350" endY="-113" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="389" startY="-173" endX="363" endY="-143" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="64" height="432" topLeftX="875" topLeftY="182" type="rect"> - <fill> - <fillColor color="rgba(255, 187, 233, 1)"/> - </fill> - </shape> - <shape width="338" height="466" topLeftX="916" topLeftY="148" type="rect"> - <fill> - <fillColor color="rgba(255, 187, 233, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="486" topLeftY="74" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(255, 187, 233, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="APzubfYrBoCiqZxaqpxcZ6hnnXk" width="474" height="438" topLeftX="486" topLeftY="102" exposure="9" contrast="4" saturation="4" temperature="-11"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="18" bottomOffset="18" presetHandlers="2"/> - </img> - <shape width="138" height="125" topLeftX="65" topLeftY="66" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="70" color="rgba(248, 206, 56, 1)" bold="true"> - <p>03</p> - </content> - </shape> - <shape width="737" height="77" topLeftX="63" topLeftY="372" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="44" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3"> - <p>职业定位</p> - </content> - </shape> - <shape width="328" height="46" topLeftX="65" topLeftY="436" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="17" color="rgba(145, 144, 168, 1)"> - <p>Career positioning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="167" height="44" topLeftX="755" topLeftY="53" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>LOGO</p> - </content> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>优劣势分析</p> - </content> - </shape> - <shape width="404" height="295" topLeftX="63" topLeftY="182" presetHandlers="16" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="341" height="78" topLeftX="94" topLeftY="270" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6">在这个幻灯片中,你可以描述相关的信息以解释你的标题。无论是介绍一个产品、提供数据分析、讲解一个概念,还是分享一段故事,都可以通过这个占位符来开始</p> - </content> - </shape> - <shape width="116" height="42" topLeftX="88" topLeftY="203" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="116" height="44" topLeftX="88" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">优势分析</span> - </strong> - </p> - </content> - </shape> - <shape width="404" height="295" topLeftX="494" topLeftY="182" presetHandlers="16" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="341" height="78" topLeftX="525" topLeftY="270" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6">在这个幻灯片中,你可以描述相关的信息以解释你的标题。无论是介绍一个产品、提供数据分析、讲解一个概念,还是分享一段故事,都可以通过这个占位符来开始</p> - </content> - </shape> - <shape width="116" height="42" topLeftX="519" topLeftY="203" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="116" height="44" topLeftX="519" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>劣势分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="167" height="44" topLeftX="755" topLeftY="53" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>LOGO</p> - </content> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>职业发展方向</p> - </content> - </shape> - <shape width="164" height="164" topLeftX="398" topLeftY="236" type="ellipse"> - <border color="rgba(251, 142, 241, 1)" width="60" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="363" startY="318" endX="597" endY="318"> - <border color="rgba(44, 41, 100, 1)" width="8" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="201" endX="480" endY="434"> - <border color="rgba(44, 41, 100, 1)" width="8" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="80" height="80" topLeftX="362" topLeftY="202" type="ellipse"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - <shadow offset="10" angle="90" blur="25" color="rgba(0, 0, 0, 0.15)"/> - </shape> - <icon width="42" height="42" topLeftX="381" topLeftY="221" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="80" height="80" topLeftX="362" topLeftY="343" type="ellipse"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - <shadow offset="10" angle="90" blur="25" color="rgba(0, 0, 0, 0.15)"/> - </shape> - <icon width="42" height="42" topLeftX="381" topLeftY="362" iconType="iconpark/Abstract/circle-three.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="80" height="80" topLeftX="517" topLeftY="202" type="ellipse"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - <shadow offset="10" angle="90" blur="25" color="rgba(0, 0, 0, 0.15)"/> - </shape> - <icon width="42" height="42" topLeftX="536" topLeftY="221" iconType="iconpark/Abstract/sales-report.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow/> - </icon> - <shape width="80" height="80" topLeftX="517" topLeftY="343" type="ellipse"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - <shadow offset="10" angle="90" blur="25" color="rgba(0, 0, 0, 0.15)"/> - </shape> - <icon width="42" height="42" topLeftX="536" topLeftY="362" iconType="iconpark/Abstract/stereo-nesting.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - <shadow angle="90"/> - </icon> - <shape width="287" height="58" topLeftX="611" topLeftY="239" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="287" height="50" topLeftX="611" topLeftY="201" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>发展方向二</p> - </content> - </shape> - <shape width="287" height="58" topLeftX="611" topLeftY="381" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="287" height="50" topLeftX="611" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>发展方向四</p> - </content> - </shape> - <shape width="287" height="58" topLeftX="63" topLeftY="239" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="287" height="50" topLeftX="63" topLeftY="201" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>发展方向一</p> - </content> - </shape> - <shape width="287" height="58" topLeftX="63" topLeftY="381" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)" fontSize="12">通过精心设计的幻灯片模板,你可以制作出引人注目且具有影响力的演示</span> - </p> - </content> - </shape> - <shape width="287" height="50" topLeftX="63" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(234, 234, 234, 1)" bold="true"> - <p>发展方向三</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="64" height="385" topLeftX="760" topLeftY="324" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="338" height="419" topLeftX="801" topLeftY="290" type="rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="404" topLeftY="169" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(208, 50, 193, 1)"/> - </fill> - </shape> - <line startX="83" startY="180" endX="14" endY="263" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="79" startY="198" endX="57" endY="224" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="416" startY="-190" endX="350" endY="-113" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="389" startY="-173" endX="363" endY="-143" alpha="0.5"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="64" height="432" topLeftX="875" topLeftY="182" type="rect"> - <fill> - <fillColor color="rgba(249, 190, 213, 1)"/> - </fill> - </shape> - <shape width="338" height="466" topLeftX="916" topLeftY="148" type="rect"> - <fill> - <fillColor color="rgba(249, 190, 213, 1)"/> - </fill> - </shape> - <shape width="262" height="131" topLeftX="486" topLeftY="74" presetHandlers="32" type="round-rect"> - <fill> - <fillColor color="rgba(249, 190, 213, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-132" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="520" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="539" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="557" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="576" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="614" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-113" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="6" height="6" topLeftX="595" topLeftY="-93" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="U07qbNriwojg4wxvawdce2vJnqh" width="286" height="343" topLeftX="596" topLeftY="154"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="138" height="125" topLeftX="65" topLeftY="66" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="70" color="rgba(248, 206, 56, 1)" bold="true"> - <p>04</p> - </content> - </shape> - <shape width="737" height="77" topLeftX="63" topLeftY="372" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="44" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3"> - <p>实施计划</p> - </content> - </shape> - <shape width="328" height="46" topLeftX="65" topLeftY="436" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="17" color="rgba(145, 144, 168, 1)"> - <p>CAREER DECISION-DECISION-MAKING</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="167" height="44" topLeftX="755" topLeftY="53" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>LOGO</p> - </content> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>计划周期一览</p> - </content> - </shape> - <shape width="249" height="78" topLeftX="63" topLeftY="402" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">用简洁明了的语言来传达你的想法,结合图像和图表,让你的观众更好地理解和记住你的演示</span> - </p> - </content> - </shape> - <shape width="835" height="29" topLeftX="63" topLeftY="357" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(21, 20, 87, 1)"/> - </fill> - </shape> - <shape width="29" height="29" topLeftX="386" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="29" height="29" topLeftX="63" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="324" height="29" topLeftX="77" topLeftY="357" type="rect"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="29" height="29" topLeftX="627" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="29" height="29" topLeftX="304" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="324" height="29" topLeftX="318" topLeftY="357" type="rect"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="29" height="29" topLeftX="869" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - </shape> - <shape width="29" height="29" topLeftX="578" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - </shape> - <shape width="294" height="29" topLeftX="589" topLeftY="357" type="rect"> - <fill> - <fillColor color="rgba(70, 218, 238, 1)"/> - </fill> - </shape> - <shape width="50" height="50" topLeftX="847" topLeftY="346" type="ellipse"> - <fill> - <fillColor color="rgba(255, 248, 254, 1)"/> - </fill> - <border color="rgba(70, 218, 238, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="25" height="25" topLeftX="860" topLeftY="359" iconType="iconpark/Base/radar.svg"> - <border color="rgba(70, 218, 238, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="50" height="50" topLeftX="288" topLeftY="346" type="ellipse"> - <fill> - <fillColor color="rgba(255, 248, 254, 1)"/> - </fill> - <border color="rgba(251, 142, 241, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="25" height="25" topLeftX="300" topLeftY="359" iconType="iconpark/Base/aiming.svg"> - <border color="rgba(251, 142, 241, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="50" height="50" topLeftX="567" topLeftY="346" type="ellipse"> - <fill> - <fillColor color="rgba(255, 248, 254, 1)"/> - </fill> - <border color="rgba(248, 206, 56, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="25" height="25" topLeftX="580" topLeftY="359" iconType="iconpark/Charts/chart-ring.svg"> - <border color="rgba(248, 206, 56, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="187" height="41" topLeftX="90" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">短期目标</span> - </p> - </content> - </shape> - <shape width="187" height="41" topLeftX="356" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">中期目标</span> - </p> - </content> - </shape> - <shape width="187" height="41" topLeftX="643" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">长期目标</span> - </p> - </content> - </shape> - <shape width="249" height="78" topLeftX="336" topLeftY="402" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">用简洁明了的语言来传达你的想法,结合图像和图表,让你的观众更好地理解和记住你的演示</span> - </p> - </content> - </shape> - <shape width="249" height="78" topLeftX="612" topLeftY="402" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">用简洁明了的语言来传达你的想法,结合图像和图表,让你的观众更好地理解和记住你的演示</span> - </p> - </content> - </shape> - <shape width="525" height="58" topLeftX="63" topLeftY="140" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6">在这个幻灯片中,你可以描述相关的信息以解释你的标题。无论是介绍一个产品、提供数据分析、讲解一个概念,还是分享一段故事,都可以通过这个占位符来开始</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="55" height="55" topLeftX="46" topLeftY="58" type="donut"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(248, 206, 56, 1) 0%,rgba(248, 206, 56, 1) 23%,rgba(248, 206, 56, 0) 100%)"/> - </fill> - </shape> - <shape width="167" height="44" topLeftX="755" topLeftY="53" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>LOGO</p> - </content> - </shape> - <shape width="367" height="71" topLeftX="63" topLeftY="61" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="34" color="rgba(255, 255, 255, 1)" bold="true"> - <p>效果评估</p> - </content> - </shape> - <shape width="467" height="340" topLeftX="432" topLeftY="143" type="triangle"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <line startX="579" startY="260" endX="750" endY="260"> - <border color="rgba(44, 41, 100, 1)" width="8" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="497" startY="372" endX="833" endY="372"> - <border color="rgba(44, 41, 100, 1)" width="8" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="116" height="44" topLeftX="607" topLeftY="187" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">长期目标</span> - </strong> - </p> - </content> - </shape> - <shape width="116" height="44" topLeftX="607" topLeftY="297" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">中期目标</span> - </strong> - </p> - </content> - </shape> - <shape width="116" height="44" topLeftX="607" topLeftY="406" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">短期目标</span> - </strong> - </p> - </content> - </shape> - <line startX="602" startY="206" endX="382" endY="206" alpha="0.4"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="315" height="58" topLeftX="63" topLeftY="187" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">无论是介绍一个产品、提供数据分析、讲解一个概念,还是分享一段故事,都可以通过这个占位符来开始</span> - </p> - </content> - </shape> - <line startX="523" startY="318" endX="335" endY="318" alpha="0.4"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="257" height="78" topLeftX="63" topLeftY="279" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">无论是介绍一个产品、提供数据分析、讲解一个概念,还是分享一段故事,都可以通过这个占位符来开始</span> - </p> - </content> - </shape> - <line startX="446" startY="427" endX="293" endY="427" alpha="0.4"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="220" height="78" topLeftX="63" topLeftY="388" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(222, 224, 227, 0.8)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(222, 224, 227, 0.8)">无论是介绍一个产品、提供数据分析、讲解一个概念,还是分享一段故事,都可以通过这个占位符来开始</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(44, 41, 100, 1)"/> - </fill> - </style> - <data> - <shape width="296" height="296" topLeftX="332" topLeftY="122" type="ellipse"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="149" height="149" topLeftX="332" topLeftY="269" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(248, 206, 56, 1)"/> - </fill> - </shape> - <shape width="247" height="247" topLeftX="356" topLeftY="146" type="ellipse"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - <shape width="525" height="101" topLeftX="218" topLeftY="202" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">谢谢!</span> - </p> - </content> - <shadow offset="4" angle="90" blur="12" color="rgba(0, 0, 0, 0.08)"/> - </shape> - <shape width="525" height="44" topLeftX="218" topLeftY="283" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">副标题信息</span> - </p> - </content> - </shape> - <shape width="32" height="28" topLeftX="637" topLeftY="158" rotation="30" type="triangle"> - <border color="rgba(100, 237, 255, 1)" width="10" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="42" height="42" topLeftX="263" topLeftY="347" type="donut"> - <fill> - <fillColor color="rgba(251, 142, 241, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--dark_general.xml b/skills/lark-slides/assets/templates/office--dark_general.xml deleted file mode 100644 index 9f4ed91ce..000000000 --- a/skills/lark-slides/assets/templates/office--dark_general.xml +++ /dev/null @@ -1,3763 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>黑底通用模板 - - - - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="668" height="36" topLeftX="100" topLeftY="293" type="text"> - <content textType="headline" fontSize="24" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>通用模板副标题</p> - </content> - </shape> - <shape width="668" height="66" topLeftX="100" topLeftY="229" type="text"> - <content textType="headline" fontSize="44" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>通用模板</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="818" height="24" topLeftX="70" topLeftY="448" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>通用模板副标题</p> - </content> - </shape> - <shape width="818" height="48" topLeftX="70" topLeftY="397" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>通用模板</p> - </content> - </shape> - <shape width="818" height="21" topLeftX="70" topLeftY="98" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>日期:2026</p> - </content> - </shape> - <shape width="818" height="21" topLeftX="70" topLeftY="73" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>作者:XXX</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="200" height="260" topLeftX="41" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="200" height="260" topLeftX="267" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="200" height="260" topLeftX="493" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="200" height="260" topLeftX="719" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="164" height="48" topLeftX="59" topLeftY="215" type="text"> - <content fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true"> - <p> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">01.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="48" topLeftX="285" topLeftY="215" type="text"> - <content fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true"> - <p> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">02.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="48" topLeftX="511" topLeftY="215" type="text"> - <content fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true"> - <p> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">03.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="48" topLeftX="737" topLeftY="215" type="text"> - <content fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true"> - <p> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">04.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="105" topLeftX="737" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="737" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="164" height="105" topLeftX="511" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="511" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="164" height="105" topLeftX="285" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="285" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="164" height="105" topLeftX="59" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="59" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="818" height="48" topLeftX="70" topLeftY="88" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="40" height="40" topLeftX="100" topLeftY="198" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16" fontFamily="Arial">01</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="505" topLeftY="198" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontFamily="Arial">02</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="100" topLeftY="287" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16" fontFamily="Arial">03</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="505" topLeftY="287" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontFamily="Arial">04</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="100" topLeftY="375" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16" fontFamily="Arial">05</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="505" topLeftY="375" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontFamily="Arial">06</span> - </strong> - </p> - </content> - </shape> - <shape width="300" height="27" topLeftX="155" topLeftY="382" type="text"> - <content fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="155" topLeftY="293" type="text"> - <content fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="560" topLeftY="382" type="text"> - <content fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="560" topLeftY="293" type="text"> - <content fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="560" topLeftY="205" type="text"> - <content fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="155" topLeftY="205" type="text"> - <content fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="760" height="48" topLeftX="100" topLeftY="108" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="YarQbf2AvoVflHx9iYDcBA6Sn2f" width="450" height="540" topLeftX="510" topLeftY="0"> - <crop type="rect" leftOffset="257" rightOffset="257" topOffset="0" bottomOffset="0"/> - </img> - <shape width="376" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>目录</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="411" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>06</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="411" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="358" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>05</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="358" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="306" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>04</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="306" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="253" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>03</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="253" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="201" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>02</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="201" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="149" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>01</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="149" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <line startX="480" startY="98" endX="890" endY="98" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="127" endX="890" endY="127" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="156" endX="890" endY="156" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="203" endX="890" endY="203" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="232" endX="890" endY="232" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="261" endX="890" endY="261" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="308" endX="890" endY="308" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="337" endX="890" endY="337" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="366" endX="890" endY="366" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="413" endX="890" endY="413" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="442" endX="890" endY="442" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="471" endX="890" endY="471" alpha="0.4"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="24" height="18" topLeftX="865" topLeftY="448" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>32</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="419" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>30</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="385" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p>29</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="448" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="419" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="385" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="343" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>27</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="314" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>23</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="280" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p>22</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="314" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="280" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="238" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>20</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="209" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>15</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="175" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p>14</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="238" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="209" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="175" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="133" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>08</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="104" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(208, 211, 214, 1)" bold="false" textAlign="right"> - <p>04</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="70" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p>03</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="133" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="104" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="70" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="400" height="32" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1">目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="760" height="66" topLeftX="100" topLeftY="237" type="text"> - <content textType="title" fontSize="44" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">通用模板标题</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="760" height="36" topLeftX="100" topLeftY="287" type="text"> - <content textType="caption" fontSize="24" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>通用模板标题</p> - </content> - </shape> - <shape width="760" height="66" topLeftX="100" topLeftY="217" type="text"> - <content textType="caption" fontSize="44" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>通用模板标题</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="760" height="72" topLeftX="100" topLeftY="352" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="72" topLeftX="100" topLeftY="262" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="54" topLeftX="100" topLeftY="190" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="48" topLeftX="100" topLeftY="100" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="390" height="90" topLeftX="500" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="30" topLeftX="500" topLeftY="240" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="390" height="30" topLeftX="70" topLeftY="240" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="390" height="90" topLeftX="70" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="240" height="30" topLeftX="360" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="90" topLeftX="360" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="650" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="90" topLeftX="650" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="70" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="90" topLeftX="70" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="180" height="30" topLeftX="497" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="497" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="180" height="30" topLeftX="283" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="283" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="180" height="30" topLeftX="710" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="710" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="180" height="30" topLeftX="70" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="70" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="360" topLeftY="320" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题五</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="360" topLeftY="360" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="650" topLeftY="320" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题六</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="650" topLeftY="360" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="70" topLeftY="320" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="360" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="650" topLeftY="169" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="650" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="360" topLeftY="169" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="360" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="70" topLeftY="168" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="470" height="30" topLeftX="420" topLeftY="350" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="470" height="54" topLeftX="420" topLeftY="393" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="470" height="30" topLeftX="420" topLeftY="227" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="470" height="54" topLeftX="420" topLeftY="270" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="470" height="30" topLeftX="420" topLeftY="104" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="470" height="54" topLeftX="420" topLeftY="147" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="300" height="48" topLeftX="70" topLeftY="246" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <icon width="32" height="32" topLeftX="337" topLeftY="102" iconType="iconpark/Base/camera.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="32" height="32" topLeftX="631" topLeftY="102" iconType="iconpark/Office/agreement.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="32" height="32" topLeftX="337" topLeftY="293" iconType="iconpark/Office/schedule.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="32" height="32" topLeftX="631" topLeftY="293" iconType="iconpark/Clothes/clothes-sweater.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="260" height="24" topLeftX="631" topLeftY="339" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="631" topLeftY="373" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="260" height="24" topLeftX="337" topLeftY="339" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="337" topLeftY="373" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="260" height="24" topLeftX="631" topLeftY="146" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="631" topLeftY="180" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="260" height="24" topLeftX="337" topLeftY="146" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="337" topLeftY="180" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="233" height="48" topLeftX="70" topLeftY="246" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="32" height="32" topLeftX="70" topLeftY="173" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial" italic="false">01</span> - </strong> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="500" topLeftY="173" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial" italic="false">02</span> - </strong> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="70" topLeftY="324" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial" italic="false">03</span> - </strong> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="500" topLeftY="324" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial" italic="false">04</span> - </strong> - </p> - </content> - </shape> - <shape width="390" height="24" topLeftX="500" topLeftY="372" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="500" topLeftY="406" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="70" topLeftY="372" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="70" topLeftY="406" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="500" topLeftY="221" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="500" topLeftY="255" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="70" topLeftY="221" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="70" topLeftY="255" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="46" height="46" topLeftX="70" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="187" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="187" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="333" iconType="iconpark/Emoji/smiling-face-with-squinting-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="333" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="330" height="24" topLeftX="560" topLeftY="322" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="356" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="322" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="356" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="560" topLeftY="176" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="176" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="187" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="187" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="333" iconType="iconpark/Emoji/smiling-face-with-squinting-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="333" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="253" height="323" topLeftX="70" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="46" height="46" topLeftX="92" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="103" topLeftY="183" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="253" height="323" topLeftX="353" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="46" height="46" topLeftX="375" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="386" topLeftY="183" iconType="iconpark/Emoji/smiling-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="253" height="323" topLeftX="637" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="46" height="46" topLeftX="659" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="670" topLeftY="183" iconType="iconpark/Emoji/distraught-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="210" height="24" topLeftX="659" topLeftY="247" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="210" height="144" topLeftX="659" topLeftY="281" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" lineSpacing="multiple:2" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="210" height="24" topLeftX="375" topLeftY="247" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="210" height="144" topLeftX="375" topLeftY="281" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" lineSpacing="multiple:2" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="210" height="24" topLeftX="91" topLeftY="247" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="210" height="144" topLeftX="91" topLeftY="281" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" lineSpacing="multiple:2" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="92" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="103" topLeftY="183" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="375" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="386" topLeftY="183" iconType="iconpark/Emoji/smiling-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="659" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="670" topLeftY="183" iconType="iconpark/Emoji/distraught-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="253" height="140" topLeftX="70" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="353" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="637" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="70" topLeftY="316" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="353" topLeftY="316" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="637" topLeftY="316" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(51, 51, 51, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="210" height="24" topLeftX="659" topLeftY="342" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题六</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="659" topLeftY="376" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="375" topLeftY="342" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题五</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="375" topLeftY="376" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="92" topLeftY="342" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="92" topLeftY="376" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="659" topLeftY="173" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="659" topLeftY="207" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="375" topLeftY="173" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="375" topLeftY="207" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="92" topLeftY="173" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="92" topLeftY="207" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="LtgrbELgNo0hlWxYYQFcEL9YnHg" width="961" height="395" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="72" bottomOffset="72"/> - </img> - <shape width="820" height="30" topLeftX="70" topLeftY="477" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>副标题</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="426" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="KrmdbCCMPoc48mxrs9KcKxZrnIe" width="820" height="308" topLeftX="70" topLeftY="162"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="76" bottomOffset="76" presetHandlers="12"/> - </img> - <shape width="606" height="63" topLeftX="284" topLeftY="70" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="200" height="48" topLeftX="70" topLeftY="78" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="KkEbbx8m2opiscxfQphcYYGrnVd" width="427" height="540" topLeftX="533" topLeftY="0"> - <crop type="rect" leftOffset="268" rightOffset="268" topOffset="0" bottomOffset="0"/> - </img> - <shape width="390" height="72" topLeftX="70" topLeftY="395" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="70" topLeftY="339" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="247" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="30" topLeftX="70" topLeftY="122" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>副标题</p> - </content> - </shape> - <shape width="390" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="PJjVblf6co4PRdxOtXmcPrwvnaf" width="360" height="400" topLeftX="530" topLeftY="70"> - <crop type="rect" leftOffset="177" rightOffset="177" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="390" height="30" topLeftX="70" topLeftY="213" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="255" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="46" height="46" topLeftX="499" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="156" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="266" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="277" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="386" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="397" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="UhIJbYObdovSqax9NStcKnSKnOh" width="427" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="268" rightOffset="268" topOffset="0" bottomOffset="0"/> - </img> - <shape width="330" height="24" topLeftX="560" topLeftY="386" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="420" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="560" topLeftY="265" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="299" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="560" topLeftY="145" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="179" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="48" topLeftX="500" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="499" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="156" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="266" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="277" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="386" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="397" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="46" height="46" topLeftX="70" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">01</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="228" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">02</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="311" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">03</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="394" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">04</span> - </p> - </content> - </shape> - <img src="AJqcbMYzJoOIrGxDMIpcgOdlnZg" width="360" height="400" topLeftX="530" topLeftY="70"> - <crop type="rect" leftOffset="177" rightOffset="177" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="340" height="54" topLeftX="131" topLeftY="394" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="340" height="54" topLeftX="131" topLeftY="311" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="340" height="54" topLeftX="131" topLeftY="228" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="340" height="54" topLeftX="131" topLeftY="145" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="401" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="M4nIbPDwjocIkRxsRrNcOiv1nCh" width="160" height="312" topLeftX="422" topLeftY="151"> - <crop type="rect" leftOffset="198" rightOffset="198" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="LKh1bppCgoGBV0xKokVc6y4jnhh" width="160" height="312" topLeftX="246" topLeftY="151"> - <crop type="rect" leftOffset="198" rightOffset="198" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="TAIObSBvYofXZVxDnY5cg1CMn2d" width="160" height="312" topLeftX="70" topLeftY="151"> - <crop type="rect" leftOffset="198" rightOffset="198" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="270" height="24" topLeftX="620" topLeftY="375" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="270" height="54" topLeftX="620" topLeftY="409" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="270" height="24" topLeftX="620" topLeftY="263" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="270" height="54" topLeftX="620" topLeftY="297" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="270" height="24" topLeftX="620" topLeftY="147" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="270" height="54" topLeftX="620" topLeftY="181" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="A2Qgb3aYxoq40Hx6VTQc8rL8ned" width="390" height="192" topLeftX="500" topLeftY="150"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="13" bottomOffset="13" presetHandlers="12"/> - </img> - <img src="KC3XbcNeBovcTLxj9axcDCcTnCd" width="390" height="192" topLeftX="70" topLeftY="150"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="13" bottomOffset="13" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="500" topLeftY="368" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="500" topLeftY="402" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="70" topLeftY="368" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="402" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="PmJPb8FpCokRZLxgx2EctvRKnRe" width="240" height="120" topLeftX="650" topLeftY="187"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <img src="EWmBbqTrCogLx2xD5TMcCIPdnZg" width="240" height="120" topLeftX="360" topLeftY="187"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <img src="W2Zsbl8qmogHphxpGTJc8KvenMf" width="240" height="120" topLeftX="70" topLeftY="187"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="650" topLeftY="334" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="368" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="334" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="368" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="334" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="368" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="N9WVbos8OoAoT8xqk5ucsl8ynHd" width="240" height="120" topLeftX="70" topLeftY="281"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <img src="FKydbsW6MofyHBxT1EycVmzanfd" width="240" height="120" topLeftX="650" topLeftY="281"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <img src="Cd6GbYAdToXNxfxvfjMcR5SEnjc" width="240" height="120" topLeftX="360" topLeftY="281"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <shape width="240" height="24" topLeftX="650" topLeftY="174" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="208" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="174" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="208" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="174" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="208" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="ZsOybrTbroDcgDxWiAdcEM6Hnmh" width="190" height="190" topLeftX="70" topLeftY="280"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="RkPlbqguIoSq5fxQJvncw6Spngc" width="190" height="190" topLeftX="280" topLeftY="280"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="WC9ZbKdv7oj2y9xRwHOcOIP2nK5" width="190" height="190" topLeftX="70" topLeftY="70"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Lt7HbAz0mo4CxUxZjjGcTvvwn0d" width="190" height="190" topLeftX="280" topLeftY="70"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="360" height="126" topLeftX="530" topLeftY="344" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="48" topLeftX="530" topLeftY="280" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="SD4bbB1gPoB8EgxDW2Dcswxun5O" width="175" height="249" topLeftX="715" topLeftY="380"> - <crop type="rect" leftOffset="135" rightOffset="135" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="K39JbmhXlo71kHx4ie1cibcznle" width="175" height="140" topLeftX="715" topLeftY="223"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="MHicbP8y4o3jGhxSzTYcDQ1lnkb" width="175" height="249" topLeftX="715" topLeftY="-43"> - <crop type="rect" leftOffset="135" rightOffset="135" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Qf0Vbu6cMoZDXBxRd7PcBnU1nph" width="175" height="140" topLeftX="523" topLeftY="-43"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="ESdYbuvzooIdyoxsbsic9jisnMf" width="175" height="140" topLeftX="523" topLeftY="426"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="NOmAbki55oibi6xtAgTcmCMPnTw" width="175" height="140" topLeftX="523" topLeftY="269"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="AS1dbFEzIow665xyBjccQqD8nic" width="175" height="140" topLeftX="523" topLeftY="113"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="400" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="379" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="413" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="269" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="303" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="161" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="195" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="KzuVbZYPmocI8QxnkXmc033Pn1e" width="240" height="329" topLeftX="650" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="WP4BbvA5oozzksxn6qSc8c8NnRd" width="240" height="329" topLeftX="360" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="GCRNbznlvomPX1xe4iRcm62Knkd" width="240" height="329" topLeftX="70" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="KF2NbFxpUoKAlLxbB4yctjBZnXd" width="551" height="150" topLeftX="339" topLeftY="320"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="79" bottomOffset="79" presetHandlers="12"/> - </img> - <img src="QYZRbX6ppoAo5OxBr8UcZVjvnbb" width="551" height="150" topLeftX="339" topLeftY="141"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="79" bottomOffset="79" presetHandlers="12"/> - </img> - <img src="YsBYb5UNOoNo8TxNTHHcI6WDn0b" width="240" height="329" topLeftX="70" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="ZIpMbverjo1wgGxVT6gccdDin0e" width="190" height="152" topLeftX="280" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="ZqxJbLWpnoN4cIx1h9Ycpl6rnXd" width="190" height="152" topLeftX="70" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="CsmnbZTLnoQnIixjXKPc4WKDnsg" width="190" height="152" topLeftX="700" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="FVJHbIjowoOUaVxC4h4cAQ4LnHb" width="190" height="152" topLeftX="490" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="CU0FbAXR9omdgPxX8gEcR346nRf" width="190" height="152" topLeftX="700" topLeftY="139"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Vhimbmo9MoFZ59xJZZxcWyUonzg" width="190" height="152" topLeftX="490" topLeftY="139"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="DSw6b0kYjo0XE3xWpEhcNo8EnFg" width="190" height="152" topLeftX="280" topLeftY="141"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Kk1IbFXHGoExjjxjTWRcYZUYnMf" width="190" height="152" topLeftX="70" topLeftY="141"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="838" height="28" topLeftX="51" topLeftY="295" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(271deg,rgba(35, 72, 197, 0.38) 0%,rgba(72, 239, 207, 0.11) 100%)"/> - </fill> - </shape> - <shape width="12" height="12" topLeftX="86" topLeftY="303" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="249" startY="319" endX="249" endY="402"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="12" height="12" topLeftX="400" topLeftY="303" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="16" height="16" topLeftX="551" topLeftY="301" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="685" topLeftY="303" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="559" startY="317" endX="559" endY="403"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="16" height="16" topLeftX="241" topLeftY="301" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="406" startY="175" endX="406" endY="301"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="691" startY="175" endX="691" endY="301"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="91" startY="175" endX="91" endY="301"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="215" height="24" topLeftX="268" topLeftY="360" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="268" topLeftY="394" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="578" topLeftY="360" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="578" topLeftY="394" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="710" topLeftY="162" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="710" topLeftY="197" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="425" topLeftY="162" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="425" topLeftY="197" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="110" topLeftY="162" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="110" topLeftY="197" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间轴</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <undefined type="fallback"/> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">时间轴</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="160" height="41" topLeftX="211" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>主题标题三</p> - </content> - </shape> - <shape width="480" height="104" topLeftX="410" topLeftY="371" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="160" height="41" topLeftX="211" topLeftY="292" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>主题标题二</p> - </content> - </shape> - <shape width="480" height="104" topLeftX="410" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="480" height="104" topLeftX="410" topLeftY="183" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="160" height="41" topLeftX="211" topLeftY="198" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>主题标题一</p> - </content> - </shape> - <shape width="820" height="77" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>时间轴</p> - </content> - </shape> - <shape width="160" height="24" topLeftX="211" topLeftY="386" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="480" height="54" topLeftX="410" topLeftY="371" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="160" height="24" topLeftX="211" topLeftY="292" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="480" height="54" topLeftX="410" topLeftY="277" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="480" height="54" topLeftX="410" topLeftY="183" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="160" height="24" topLeftX="211" topLeftY="198" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>时间轴</p> - </content> - </shape> - <line startX="121" startY="160" endX="121" endY="456"> - <border color="rgba(130, 167, 252, 1)" dashArray="dash" width="1"/> - </line> - <shape width="103" height="35" topLeftX="69" topLeftY="193" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial">2022-2023</span> - </strong> - </p> - </content> - </shape> - <shape width="103" height="35" topLeftX="69" topLeftY="286" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial">2024-2026</span> - </strong> - </p> - </content> - </shape> - <shape width="103" height="35" topLeftX="69" topLeftY="380" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial">2026</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="380" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">标题和描述</span> - </p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="195" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="161" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16" fontFamily="思源黑体">主题标题一</span> - </strong> - </p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="303" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="269" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16" fontFamily="思源黑体">主题标题二</span> - </strong> - </p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="413" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="379" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16" fontFamily="思源黑体">主题标题三</span> - </strong> - </p> - </content> - </shape> - <undefined type="chart_refer_host_perm"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="188" height="24" topLeftX="516" topLeftY="144" type="text"> - <content fontSize="16" color="rgba(208, 211, 214, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(208, 211, 214, 1)" fontSize="16">数据标题</span> - </strong> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="516" topLeftY="175" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="274" height="20" topLeftX="519" topLeftY="178" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="24" topLeftX="825" topLeftY="144" type="text"> - <content fontSize="16" color="rgba(78, 110, 253, 1)" bold="true" textAlign="right"> - <p textAlign="right"> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="16">67%</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="24" topLeftX="516" topLeftY="241" type="text"> - <content fontSize="16" color="rgba(208, 211, 214, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">数据标题</span> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="516" topLeftY="272" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="357" height="20" topLeftX="519" topLeftY="275" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="25" topLeftX="825" topLeftY="241" type="text"> - <content fontSize="17" color="rgba(78, 110, 253, 1)" bold="true" textAlign="right"> - <p textAlign="right"> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="17">98%</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="24" topLeftX="516" topLeftY="341" type="text"> - <content fontSize="16" color="rgba(208, 211, 214, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">数据标题</span> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="516" topLeftY="372" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.08)"/> - </fill> - <border color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="174" height="20" topLeftX="519" topLeftY="375" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="25" topLeftX="825" topLeftY="341" type="text"> - <content fontSize="17" color="rgba(78, 110, 253, 1)" bold="true" textAlign="right"> - <p textAlign="right"> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="17">43%</span> - </strong> - </p> - </content> - </shape> - <shape width="380" height="48" topLeftX="70" topLeftY="154" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">标题和描述</span> - </p> - </content> - </shape> - <shape width="380" height="54" topLeftX="70" topLeftY="222" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="380" height="90" topLeftX="70" topLeftY="296" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="32" fontFamily="思源黑体">标题和描述</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="650" topLeftY="165" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">主题标题三</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="199" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="165" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">主题标题二</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="199" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="165" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">主题标题一</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="199" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <undefined type="chart_refer_host_perm"/> - <undefined type="chart_refer_host_perm"/> - <undefined type="chart_refer_host_perm"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="330" height="24" topLeftX="131" topLeftY="386" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">主题标题三</span> - </p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="420" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="265" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">主题标题二</span> - </p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="299" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="145" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">主题标题一</span> - </p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="179" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(208, 211, 214, 1)">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="156" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="266" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="277" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="386" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="397" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="391" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="32" fontFamily="思源黑体">标题和描述</span> - </p> - </content> - </shape> - <undefined type="chart_refer_host_perm"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <table topLeftX="70" topLeftY="152"> - <colgroup> - <col span="4" width="205"/> - </colgroup> - <tr height="53"> - <td> - <borderTop color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="思源黑体">标题</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial">2025</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial">2026</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="思源黑体">相关细节</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="思源黑体">标题</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">30M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">32M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontFamily="思源黑体">标题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">45M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">40M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontFamily="思源黑体">标题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">15M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">30M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontFamily="思源黑体">标题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">60M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">66M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.08)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)"> - <p> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - </table> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">标题和描述</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="390" height="68" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="32">标题和描述</span> - </p> - </content> - </shape> - <img src="S3T2bozEHor9A5xrFsVcG1kUnpe" width="427" height="540" topLeftX="533" topLeftY="0"> - <crop type="rect" leftOffset="268" rightOffset="268" topOffset="0" bottomOffset="0"/> - </img> - <shape width="120" height="18" topLeftX="70" topLeftY="331" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="70" topLeftY="267" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="44" fontFamily="Arial">2,080</span> - </p> - </content> - </shape> - <shape width="120" height="18" topLeftX="265" topLeftY="331" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="265" topLeftY="267" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">89</span> - <span color="rgba(255, 255, 255, 1)" fontSize="24">%</span> - </p> - </content> - </shape> - <shape width="120" height="18" topLeftX="70" topLeftY="444" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="70" topLeftY="380" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="44" fontFamily="Arial">1,562</span> - </p> - </content> - </shape> - <shape width="120" height="18" topLeftX="265" topLeftY="444" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="265" topLeftY="380" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">76</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="105" height="90" topLeftX="70" topLeftY="209" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="60" fontFamily="Arial">98</span> - <span color="rgba(255, 255, 255, 1)" fontSize="38" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="260" height="18" topLeftX="70" topLeftY="194" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="18" topLeftX="70" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="57" topLeftX="70" topLeftY="358" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">2,080</span> - </p> - </content> - </shape> - <shape width="200" height="18" topLeftX="380" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="57" topLeftX="380" topLeftY="358" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">6,098</span> - </p> - </content> - </shape> - <shape width="200" height="18" topLeftX="690" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="57" topLeftX="690" topLeftY="358" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">78</span> - <span color="rgba(255, 255, 255, 1)" fontSize="24">%</span> - </p> - </content> - </shape> - <line startX="890" startY="306" endX="70" endY="306"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="42" height="36" topLeftX="175" topLeftY="244" type="text"> - <content fontSize="16" color="rgba(78, 110, 253, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="24">↑</span> - </strong> - </p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">标题和描述</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="120" height="120" topLeftX="130" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">2,080</span> - </p> - </content> - </shape> - <shape width="120" height="120" topLeftX="420" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">6,098</span> - </p> - </content> - </shape> - <shape width="120" height="120" topLeftX="710" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">98%</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="338" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="300" type="text"> - <content textType="sub-headline" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="16">关键数据</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="338" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="300" type="text"> - <content textType="sub-headline" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="16">关键数据</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="338" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" fontFamily="思源黑体">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="650" topLeftY="300" type="text"> - <content textType="sub-headline" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="16">关键数据</span> - </p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">标题和描述</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="PwHLbaOOFoskGTxSGDzcqi1NnEr" width="194" height="389" topLeftX="609" topLeftY="76"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="IwxFbHzrHoY6F2xjRlEcIw9mnmb" width="162" height="353" topLeftX="626" topLeftY="89"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <shape width="472" height="30" topLeftX="70" topLeftY="205" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="472" height="72" topLeftX="70" topLeftY="245" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="PwHLbaOOFoskGTxSGDzcqi1NnEr" width="316" height="633" topLeftX="529" topLeftY="76"> - <crop type="rect" leftOffset="128" rightOffset="130" topOffset="18" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="D6Q4b7fdzoIfcWx4foWcLJMVnib" width="264" height="574" topLeftX="557" topLeftY="95"> - <crop type="rect" leftOffset="381" rightOffset="381" topOffset="0" bottomOffset="0" presetHandlers="38"/> - </img> - <shape width="360" height="24" topLeftX="70" topLeftY="375" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="360" height="36" topLeftX="70" topLeftY="409" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="24" topLeftX="70" topLeftY="263" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="360" height="36" topLeftX="70" topLeftY="297" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="24" topLeftX="70" topLeftY="147" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="360" height="36" topLeftX="70" topLeftY="181" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <line startX="390" startY="166" endX="320" endY="166"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="390" startY="279" endX="320" endY="279"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="390" startY="392" endX="320" endY="392"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="573" startY="218" endX="643" endY="218"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="573" startY="320" endX="643" endY="320"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <img src="PwHLbaOOFoskGTxSGDzcqi1NnEr" width="194" height="389" topLeftX="383" topLeftY="83"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="DgzVb6tJboDNjcx436ScwRn9nFg" width="162" height="353" topLeftX="400" topLeftY="96"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <shape width="240" height="72" topLeftX="654" topLeftY="284" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="654" topLeftY="180" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="356" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="243" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="131" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="PwHLbaOOFoskGTxSGDzcqi1NnEr" width="194" height="389" topLeftX="67" topLeftY="83"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="PwHLbaOOFoskGTxSGDzcqi1NnEr" width="194" height="389" topLeftX="276" topLeftY="83"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="46" height="46" topLeftX="517" topLeftY="211" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="222" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="517" topLeftY="331" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="342" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="HaMhbb8VWoAFgoxOfL1cknBUnNg" width="162" height="353" topLeftX="293" topLeftY="96"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <img src="Bc5jbqBr7oaYVlxGnMocTfAMngW" width="162" height="353" topLeftX="84" topLeftY="96"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <shape width="310" height="24" topLeftX="578" topLeftY="331" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="310" height="54" topLeftX="578" topLeftY="365" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="310" height="24" topLeftX="578" topLeftY="210" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="310" height="54" topLeftX="578" topLeftY="244" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="370" height="48" topLeftX="518" topLeftY="135" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="517" topLeftY="211" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="222" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="517" topLeftY="331" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="342" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="ISfIbGa4no1LVaxf7iccWDcznwd" width="151" height="302" topLeftX="115" topLeftY="70"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="ISfIbGa4no1LVaxf7iccWDcznwd" width="151" height="302" topLeftX="405" topLeftY="70"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="ISfIbGa4no1LVaxf7iccWDcznwd" width="151" height="302" topLeftX="694" topLeftY="70"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="UZyZbOPaToLJYwxCW3ScXvkBn8f" width="127" height="277" topLeftX="707" topLeftY="78"> - <crop type="rect" leftOffset="183" rightOffset="183" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="NfYwbc2dDovjxGxrdy8c4TXynSf" width="127" height="277" topLeftX="417" topLeftY="78"> - <crop type="rect" leftOffset="183" rightOffset="183" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="IB2TbVOTUoNcPvxxIHJct3jwn4b" width="127" height="277" topLeftX="127" topLeftY="78"> - <crop type="rect" leftOffset="183" rightOffset="183" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <shape width="240" height="24" topLeftX="650" topLeftY="381" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="415" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="center"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="381" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="415" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="center"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="381" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="415" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="center"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="WCF2b1GBeoJXoDx1GFucTFyDnKb" width="595" height="359" topLeftX="182" topLeftY="95" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="GQo2bXF7LoWHlSxZQb2cJDvjnJf" width="477" height="321" topLeftX="242" topLeftY="104"> - <crop type="rect" leftOffset="48" rightOffset="48" topOffset="0" bottomOffset="0" presetHandlers="10"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="WCF2b1GBeoJXoDx1GFucTFyDnKb" width="595" height="359" topLeftX="451" topLeftY="95" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="BINqbR9Kvoro12x8YSHcw68hnQg" width="477" height="321" topLeftX="511" topLeftY="104"> - <crop type="rect" leftOffset="48" rightOffset="48" topOffset="0" bottomOffset="0" presetHandlers="10"/> - </img> - <shape width="390" height="30" topLeftX="70" topLeftY="210" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="250" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="820" height="36" topLeftX="70" topLeftY="110" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(208, 211, 214, 1)" fontSize="12" bold="false">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="820" height="30" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontSize="20" fontFamily="思源黑体">主题标题</span> - </strong> - </p> - </content> - </shape> - <img src="WCF2b1GBeoJXoDx1GFucTFyDnKb" width="790" height="477" topLeftX="10" topLeftY="180" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="SH6ubsnOuogi1DxQ8IncbN4znud" width="633" height="426" topLeftX="88" topLeftY="190"> - <crop type="rect" leftOffset="64" rightOffset="64" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="ISfIbGa4no1LVaxf7iccWDcznwd" width="205" height="412" topLeftX="667" topLeftY="283"> - <crop type="rect" leftOffset="83" rightOffset="85" topOffset="12" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="YleVbfXs3oolUgxozWdccVzXnWh" width="172" height="374" topLeftX="685" topLeftY="296"> - <crop type="rect" leftOffset="248" rightOffset="248" topOffset="0" bottomOffset="0" presetHandlers="24"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <shape width="400" height="90" topLeftX="70" topLeftY="371" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="54" topLeftX="70" topLeftY="294" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="30" topLeftX="70" topLeftY="118" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p>副标题</p> - </content> - </shape> - <shape width="400" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 0.922)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <img src="WCF2b1GBeoJXoDx1GFucTFyDnKb" width="595" height="359" topLeftX="544" topLeftY="95" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="C1zhbKMzgoJFLSxAN97c0LhGnkh" width="477" height="321" topLeftX="603" topLeftY="104"> - <crop type="rect" leftOffset="48" rightOffset="48" topOffset="0" bottomOffset="0" presetHandlers="10"/> - </img> - <img src="ISfIbGa4no1LVaxf7iccWDcznwd" width="151" height="302" topLeftX="499" topLeftY="197"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="HYu3bZ2DPolY4yxpwZPcdFkBnWg" width="126" height="275" topLeftX="513" topLeftY="206"> - <crop type="rect" leftOffset="182" rightOffset="182" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="VrBmbqW2BoHPunxOZi2carKsn8d" width="653" height="540" topLeftX="307" topLeftY="0"> - <crop type="rect" leftOffset="155" rightOffset="155" topOffset="0" bottomOffset="0"/> - </img> - <shape width="180" height="48" topLeftX="70" topLeftY="423" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>谢谢观看</p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="270" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>湖北省 武汉市 洪山区</p> - </content> - </shape> - <shape width="180" height="18" topLeftX="70" topLeftY="252" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>联系地址</p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="192" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <a href="mailto:sherry@gmail.com"> - <span color="rgba(20, 86, 240, 1)">Sherry@gmail.com</span> - </a> - </p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="167" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>+132 9792 7108</p> - </content> - </shape> - <shape width="180" height="18" topLeftX="70" topLeftY="149" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>联系方式</p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="88" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>XXX</p> - </content> - </shape> - <shape width="180" height="18" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(208, 211, 214, 1)" bold="false" textAlign="left"> - <p>联系人</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </style> - <data> - <img src="Gh35b4dQ5o4egexxcEgcEv5Infg" width="960" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0"/> - </img> - <shape width="668" height="66" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="44" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>谢谢观看</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--dept_annual_report.xml b/skills/lark-slides/assets/templates/office--dept_annual_report.xml deleted file mode 100644 index 96ed90409..000000000 --- a/skills/lark-slides/assets/templates/office--dept_annual_report.xml +++ /dev/null @@ -1,1192 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>部门年度工作汇报 - - - - - - - <headline fontColor="rgba(255, 255, 255, 1)"/> - <sub-headline fontColor="rgba(255, 255, 255, 1)"/> - <body fontColor="rgba(255, 255, 255, 1)"/> - <caption fontColor="rgba(255, 255, 255, 1)" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="MHF4bfOmPoPVhcxIt1xcp2vnnWb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="234" height="44" topLeftX="350" topLeftY="294" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p>汇报人:XXX</p> - </content> - </shape> - <shape width="172" height="101" topLeftX="347" topLeftY="184" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>2024</p> - </content> - </shape> - <shape width="261" height="182" topLeftX="63" topLeftY="179" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>部门年度工作汇报</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HrflbvupMo6hHsxWxZNcKip5nXd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="680" height="540" topLeftX="280" topLeftY="0" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 0, 0, 0.54) 0%,rgba(0, 0, 0, 0.2) 100%)"/> - </fill> - </shape> - <shape width="680" height="540" topLeftX="280" topLeftY="0" alpha="0.45" type="rect"> - <fill> - <fillColor color="rgba(0, 22, 81, 1)"/> - </fill> - </shape> - <shape width="280" height="540" topLeftX="0" topLeftY="0" alpha="0.84" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="200" height="47" topLeftX="686" topLeftY="166" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>工作成果展示</p> - </content> - </shape> - <shape width="200" height="47" topLeftX="686" topLeftY="250" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>现况复盘总结</p> - </content> - </shape> - <shape width="200" height="47" topLeftX="388" topLeftY="334" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>未来发展计划</p> - </content> - </shape> - <shape width="200" height="47" topLeftX="387" topLeftY="250" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>工作数据分析</p> - </content> - </shape> - <shape width="200" height="47" topLeftX="388" topLeftY="166" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p>年度工作概述</p> - </content> - </shape> - <shape width="192" height="80" topLeftX="48" topLeftY="148" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="true"> - <p>目录</p> - </content> - </shape> - <shape width="232" height="56" topLeftX="48" topLeftY="207" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span fontSize="24">CONTENTS</span> - </p> - </content> - </shape> - <shape width="68" height="69" topLeftX="628" topLeftY="239" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true"> - <p>04</p> - </content> - </shape> - <shape width="68" height="69" topLeftX="628" topLeftY="156" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true"> - <p>02</p> - </content> - </shape> - <shape width="68" height="69" topLeftX="328" topLeftY="322" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true"> - <p>05</p> - </content> - </shape> - <shape width="68" height="69" topLeftX="328" topLeftY="239" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true"> - <p>03</p> - </content> - </shape> - <shape width="68" height="69" topLeftX="328" topLeftY="155" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="K183bP2GcoB1qTxZH5FcbKQSnzh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="98" topLeftX="75" topLeftY="370" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - </shape> - <shape width="790" height="44" topLeftX="86" topLeftY="430" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题</p> - </content> - </shape> - <shape width="790" height="101" topLeftX="86" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>年度工作概述</p> - </content> - </shape> - <shape width="192" height="202" topLeftX="55" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="120" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="true"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="315" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span bold="false">重点工作内容</span> - </p> - </content> - </shape> - <shape width="56" height="56" topLeftX="509" topLeftY="80" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"> - <p> - <strong> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="24">1</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="56" height="56" topLeftX="726" topLeftY="80" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"> - <p> - <strong> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="24">2</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="56" height="56" topLeftX="509" topLeftY="294" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(21, 211, 237, 1)"> - <p> - <strong> - <span color="rgba(21, 211, 237, 1)" fontSize="24">3</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="56" height="56" topLeftX="726" topLeftY="294" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(21, 211, 237, 1)"> - <p> - <strong> - <span color="rgba(21, 211, 237, 1)" fontSize="24">4</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="62" topLeftX="502" topLeftY="395" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(168, 174, 181, 1)" bold="false"> - <p>演示文稿是实用工具,可以是演示、演讲、报告等等。</p> - </content> - </shape> - <shape width="202" height="62" topLeftX="719" topLeftY="395" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(168, 174, 181, 1)" bold="false"> - <p>演示文稿是实用工具,可以是演示、演讲、报告等等。</p> - </content> - </shape> - <shape width="202" height="62" topLeftX="719" topLeftY="182" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(168, 174, 181, 1)" bold="false"> - <p>演示文稿是实用工具,可以是演示、演讲、报告等等。</p> - </content> - </shape> - <shape width="202" height="62" topLeftX="502" topLeftY="182" alpha="0.8" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(168, 174, 181, 1)" bold="false"> - <p>演示文稿是实用工具,可以是演示、演讲、报告等等。</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="502" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">项目推进</span> - </p> - </content> - </shape> - <shape width="202" height="44" topLeftX="719" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">产品销售额</span> - </p> - </content> - </shape> - <shape width="202" height="44" topLeftX="719" topLeftY="148" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">企业宣传</span> - </p> - </content> - </shape> - <shape width="202" height="44" topLeftX="502" topLeftY="148" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">成员招新</span> - </p> - </content> - </shape> - <img src="DVHSbuS3xowvubxBiQzcsE0SnOc" width="378" height="187" topLeftX="50" topLeftY="293" saturation="-8" temperature="-43"> - <crop type="rect" leftOffset="24" rightOffset="158" topOffset="0" bottomOffset="322" presetHandlers="12"/> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="262" height="307" topLeftX="68" topLeftY="162" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 243, 243, 0.58) 17%,rgba(180, 140, 247, 0.73) 50%,rgba(139, 163, 245, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="262" height="307" topLeftX="350" topLeftY="162" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="262" height="307" topLeftX="632" topLeftY="162" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 243, 243, 0.58) 17%,rgba(180, 140, 247, 0.73) 50%,rgba(139, 163, 245, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="636" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span bold="false">项目成果</span> - </p> - </content> - </shape> - <img src="BLxrbI0xIo61P9xDfgpcMilQnih" width="240" height="153" topLeftX="78" topLeftY="174"> - <crop type="rect" leftOffset="8" rightOffset="8" topOffset="107" bottomOffset="81" presetHandlers="6"/> - <border color="linear-gradient(320deg,rgba(203, 116, 228, 1) 0%,rgba(104, 65, 201, 1) 33%,rgba(76, 169, 223, 0.31) 67%,rgba(61, 84, 213, 0.5) 100%)" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="236" height="47" topLeftX="645" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(222, 224, 227, 1)">成果三</span> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="645" topLeftY="377" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="236" height="47" topLeftX="362" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(222, 224, 227, 1)">成果二</span> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="362" topLeftY="377" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="236" height="47" topLeftX="82" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(222, 224, 227, 1)" fontSize="18">成果一</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="82" topLeftY="377" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <img src="Wax6bldALoYdutxgtonceksRnQf" width="240" height="153" topLeftX="361" topLeftY="174"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="75" bottomOffset="13" presetHandlers="6"/> - <border color="linear-gradient(354deg,rgba(165, 18, 255, 1) 0%,rgba(108, 56, 255, 1) 22%,rgba(28, 229, 255, 1) 100%)" lineJoin="miter" miterLimit="10"/> - </img> - <img src="Sq5bbcmtjoLt6Rx0P4WcK8QAnSg" width="240" height="153" topLeftX="641" topLeftY="174"> - <crop type="rect" leftOffset="3" rightOffset="5" topOffset="66" bottomOffset="29" presetHandlers="6"/> - <border color="linear-gradient(320deg,rgba(203, 116, 228, 1) 0%,rgba(104, 65, 201, 1) 33%,rgba(76, 169, 223, 0.31) 67%,rgba(61, 84, 213, 0.5) 100%)" lineJoin="miter" miterLimit="10"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="K183bP2GcoB1qTxZH5FcbKQSnzh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="98" topLeftX="75" topLeftY="370" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - </shape> - <shape width="790" height="44" topLeftX="86" topLeftY="436" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题</p> - </content> - </shape> - <shape width="790" height="101" topLeftX="86" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>工作成果展示</p> - </content> - </shape> - <shape width="192" height="202" topLeftX="55" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="120" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="true"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="636" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span bold="false">目标达成情况</span> - </p> - </content> - </shape> - <shape width="78" height="47" topLeftX="332" topLeftY="261" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true" letterSpacing="2"> - <p letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Trebuchet MS">100%</span> - </strong> - </p> - </content> - </shape> - <shape width="165" height="165" topLeftX="739" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(20deg,rgba(203, 116, 228, 1) 0%,rgba(104, 65, 201, 1) 33%,rgba(76, 169, 223, 0.31) 67%,rgba(61, 84, 213, 0.5) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="156" height="44" topLeftX="744" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">产品销售额</span> - </p> - </content> - </shape> - <shape width="138" height="138" topLeftX="753" topLeftY="215" alpha="0.2" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="138" height="138" topLeftX="753" topLeftY="215" flipX="true" type="donut"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="75" height="47" topLeftX="787" topLeftY="261" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true" letterSpacing="2"> - <p letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Trebuchet MS">100%</span> - </strong> - </p> - </content> - </shape> - <shape width="165" height="165" topLeftX="512" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(20deg,rgba(203, 116, 228, 1) 0%,rgba(104, 65, 201, 1) 33%,rgba(76, 169, 223, 0.31) 67%,rgba(61, 84, 213, 0.5) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="156" height="44" topLeftX="516" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">项目推进</span> - </p> - </content> - </shape> - <shape width="138" height="138" topLeftX="525" topLeftY="215" alpha="0.2" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="138" height="138" topLeftX="525" topLeftY="215" flipX="true" type="slides-block-arc"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="71" height="47" topLeftX="565" topLeftY="261" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true" letterSpacing="2"> - <p letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Trebuchet MS">75%</span> - </strong> - </p> - </content> - </shape> - <shape width="165" height="165" topLeftX="284" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(20deg,rgba(196, 97, 223, 1) 0%,rgba(121, 83, 219, 1) 33%,rgba(101, 199, 255, 0.43) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="156" height="44" topLeftX="288" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">企业宣传</span> - </p> - </content> - </shape> - <shape width="138" height="138" topLeftX="297" topLeftY="215" alpha="0.2" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="138" height="138" topLeftX="297" topLeftY="215" flipX="true" type="donut"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="165" height="165" topLeftX="56" topLeftY="202" rotation="90" type="slides-full-round-rect"> - <border color="linear-gradient(20deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.2) 67%,rgba(69, 96, 245, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="156" height="44" topLeftX="60" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">成员招新</span> - </p> - </content> - </shape> - <shape width="138" height="138" topLeftX="70" topLeftY="215" alpha="0.2" type="donut"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="138" height="138" topLeftX="69" topLeftY="215" flipX="true" type="slides-block-arc"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="71" height="47" topLeftX="109" topLeftY="261" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Trebuchet MS" color="rgba(255, 255, 255, 1)" bold="true" letterSpacing="2"> - <p letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Trebuchet MS">75%</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="322" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span bold="false">销售成果</span> - </p> - </content> - </shape> - <shape width="322" height="83" topLeftX="52" topLeftY="144" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(168, 174, 181, 1)" bold="false"> - <p> - <span color="rgba(168, 174, 181, 1)" fontSize="14">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="355" height="44" topLeftX="555" topLeftY="88" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="16">成果一</span> - </strong> - </p> - </content> - </shape> - <shape width="355" height="58" topLeftX="555" topLeftY="124" alpha="0.8" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="110" height="110" topLeftX="426" topLeftY="80" presetHandlers="20" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="48" height="48" topLeftX="457" topLeftY="109" iconType="iconpark/Charts/chart-proportion.svg"> - <border color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="110" height="110" topLeftX="426" topLeftY="215" presetHandlers="20" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="48" height="48" topLeftX="457" topLeftY="246" iconType="iconpark/Charts/data-one.svg"> - <border color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="110" height="110" topLeftX="426" topLeftY="361" presetHandlers="20" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="48" height="48" topLeftX="457" topLeftY="392" iconType="iconpark/Charts/positive-dynamics.svg"> - <border color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="355" height="44" topLeftX="555" topLeftY="223" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="16">成果二</span> - </strong> - </p> - </content> - </shape> - <shape width="355" height="58" topLeftX="555" topLeftY="259" alpha="0.8" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="355" height="44" topLeftX="555" topLeftY="368" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="16">成果三</span> - </strong> - </p> - </content> - </shape> - <shape width="355" height="58" topLeftX="555" topLeftY="405" alpha="0.8" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="K183bP2GcoB1qTxZH5FcbKQSnzh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="98" topLeftX="75" topLeftY="370" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - </shape> - <shape width="790" height="44" topLeftX="86" topLeftY="436" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题</p> - </content> - </shape> - <shape width="790" height="101" topLeftX="86" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>工作数据分析</p> - </content> - </shape> - <shape width="192" height="202" topLeftX="55" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="120" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="true"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="856" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span bold="false">项目投标率</span> - </p> - </content> - </shape> - <shape width="2" height="197" topLeftX="328" topLeftY="190" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="179" height="187" topLeftX="385" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="110" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="false"> - <p> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="110" fontFamily="Trebuchet MS" bold="false">62</span> - </p> - </content> - </shape> - <shape width="81" height="81" topLeftX="516" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" color="rgba(21, 211, 237, 1)"> - <p> - <span color="rgba(21, 211, 237, 1)" fontSize="40" fontFamily="Sans Serif">%</span> - </p> - </content> - </shape> - <shape width="148" height="44" topLeftX="387" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(168, 174, 181, 1)" bold="true"> - <p> - <strong> - <span color="rgba(168, 174, 181, 1)">全年累计开展项目</span> - </strong> - </p> - </content> - </shape> - <shape width="179" height="187" topLeftX="70" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="110" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="false"> - <p> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="110" fontFamily="Trebuchet MS" bold="false">40</span> - </p> - </content> - </shape> - <shape width="81" height="81" topLeftX="202" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" color="rgba(21, 211, 237, 1)"> - <p> - <span color="rgba(21, 211, 237, 1)" fontSize="40" fontFamily="Sans Serif">%</span> - </p> - </content> - </shape> - <shape width="122" height="44" topLeftX="80" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(168, 174, 181, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(168, 174, 181, 1)">投标达率</span> - </strong> - </p> - </content> - </shape> - <shape width="2" height="197" topLeftX="652" topLeftY="190" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="179" height="187" topLeftX="709" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="110" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="false"> - <p> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="110" fontFamily="Trebuchet MS" bold="false">80</span> - </p> - </content> - </shape> - <shape width="81" height="81" topLeftX="841" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" color="rgba(21, 211, 237, 1)"> - <p> - <span color="rgba(21, 211, 237, 1)" fontSize="40" fontFamily="Sans Serif">%</span> - </p> - </content> - </shape> - <shape width="122" height="44" topLeftX="719" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(168, 174, 181, 1)" bold="true" textAlign="center"> - <p>项目覆盖达率</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="856" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span bold="false">宣传覆盖率</span> - </p> - </content> - </shape> - <shape width="2" height="197" topLeftX="479" topLeftY="190" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0) 0%,rgba(150, 219, 219, 0.58) 17%,rgba(172, 122, 255, 0.73) 50%,rgba(168, 187, 253, 0.62) 85%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="179" height="187" topLeftX="576" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="110" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="false"> - <p> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="110" fontFamily="Trebuchet MS" bold="false">90</span> - </p> - </content> - </shape> - <shape width="81" height="81" topLeftX="707" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" color="rgba(21, 211, 237, 1)"> - <p> - <span color="rgba(21, 211, 237, 1)" fontSize="40" fontFamily="Sans Serif">%</span> - </p> - </content> - </shape> - <shape width="148" height="44" topLeftX="578" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(168, 174, 181, 1)" bold="true"> - <p> - <strong> - <span color="rgba(168, 174, 181, 1)">媒体平台覆盖率</span> - </strong> - </p> - </content> - </shape> - <shape width="179" height="187" topLeftX="191" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="110" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="false"> - <p> - <span color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" fontSize="110" fontFamily="Trebuchet MS" bold="false">70</span> - </p> - </content> - </shape> - <shape width="81" height="81" topLeftX="323" topLeftY="258" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="Sans Serif" color="rgba(21, 211, 237, 1)"> - <p> - <span color="rgba(21, 211, 237, 1)" fontSize="40" fontFamily="Sans Serif">%</span> - </p> - </content> - </shape> - <shape width="201" height="44" topLeftX="162" topLeftY="343" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(168, 174, 181, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(168, 174, 181, 1)">全年合作媒体平台增长率</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="K183bP2GcoB1qTxZH5FcbKQSnzh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="98" topLeftX="75" topLeftY="370" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - </shape> - <shape width="790" height="44" topLeftX="86" topLeftY="436" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题</p> - </content> - </shape> - <shape width="790" height="101" topLeftX="86" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>现况复盘总结</p> - </content> - </shape> - <shape width="192" height="202" topLeftX="55" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="120" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="true"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="636" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p>项目执行过程</p> - </content> - </shape> - <shape width="459" height="62" topLeftX="432" topLeftY="67" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(222, 224, 227, 1)" bold="false"> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="843" height="26" topLeftX="62" topLeftY="318" presetHandlers="120" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="66" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="374" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="680" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="27" height="26" topLeftX="192" topLeftY="318" alpha="0.57" iconType="iconpark/Arrows/right.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="27" height="26" topLeftX="497" topLeftY="318" alpha="0.57" iconType="iconpark/Arrows/right.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="236" height="47" topLeftX="62" topLeftY="359" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="18">过程一</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="62" topLeftY="395" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="236" height="47" topLeftX="362" topLeftY="359" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="18">过程二</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="362" topLeftY="395" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="236" height="47" topLeftX="669" topLeftY="359" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="18">过程三</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="669" topLeftY="395" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="636" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p>风险与问题分析</p> - </content> - </shape> - <shape width="402" height="307" topLeftX="68" topLeftY="162" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(133deg,rgba(224, 239, 244, 0) 0%,rgba(150, 243, 243, 0.58) 17%,rgba(180, 140, 247, 0.73) 50%,rgba(139, 163, 245, 0.62) 85%,rgba(240, 249, 254, 0) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="362" height="47" topLeftX="90" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p>风险一</p> - </content> - </shape> - <shape width="362" height="58" topLeftX="89" topLeftY="384" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</p> - </content> - </shape> - <shape width="402" height="307" topLeftX="487" topLeftY="162" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 0.15)"/> - </fill> - <border color="linear-gradient(20deg,rgba(210, 132, 232, 1) 0%,rgba(146, 108, 242, 1) 33%,rgba(106, 196, 248, 0.52) 67%,rgba(69, 96, 245, 0.48) 100%)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="362" height="47" topLeftX="508" topLeftY="340" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p>风险二</p> - </content> - </shape> - <shape width="362" height="58" topLeftX="508" topLeftY="384" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <icon width="58" height="58" topLeftX="90" topLeftY="183" iconType="iconpark/Abstract/open-one.svg"> - <border color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="58" height="58" topLeftX="508" topLeftY="183" iconType="iconpark/Abstract/category-management.svg"> - <border color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="K183bP2GcoB1qTxZH5FcbKQSnzh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="3" height="98" topLeftX="75" topLeftY="370" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - </shape> - <shape width="790" height="44" topLeftX="86" topLeftY="436" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题</p> - </content> - </shape> - <shape width="790" height="101" topLeftX="86" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true"> - <p>未来发展计划</p> - </content> - </shape> - <shape width="192" height="202" topLeftX="55" topLeftY="59" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="120" fontFamily="Trebuchet MS" color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)" bold="true"> - <p>05</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DBQnbuIuEom29SxUDjLcOK8Wn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="636" height="74" topLeftX="52" topLeftY="59" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(255, 255, 255, 1)" bold="false"> - <p>计划步骤</p> - </content> - </shape> - <shape width="459" height="62" topLeftX="432" topLeftY="67" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(222, 224, 227, 1)" bold="false"> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="843" height="26" topLeftX="62" topLeftY="318" presetHandlers="120" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(100, 232, 214, 1) 0%,rgba(115, 187, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="66" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="374" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="680" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="27" height="26" topLeftX="192" topLeftY="318" alpha="0.57" iconType="iconpark/Arrows/right.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="27" height="26" topLeftX="497" topLeftY="318" alpha="0.57" iconType="iconpark/Arrows/right.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="236" height="47" topLeftX="62" topLeftY="359" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(245, 246, 247, 1)" fontSize="18">步骤一</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="78" topLeftX="62" topLeftY="395" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="236" height="47" topLeftX="362" topLeftY="359" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p>步骤二</p> - </content> - </shape> - <shape width="236" height="78" topLeftX="362" topLeftY="395" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="236" height="47" topLeftX="669" topLeftY="359" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(245, 246, 247, 1)" bold="true" textAlign="left"> - <p>步骤三</p> - </content> - </shape> - <shape width="236" height="78" topLeftX="669" topLeftY="395" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(168, 174, 181, 1)" lineSpacing="multiple:1.6"> - <p lineSpacing="multiple:1.6"> - <span color="rgba(168, 174, 181, 1)" fontSize="12">演示文稿是实用工具,可以是演示、演讲、报告等等。他们有各种各样的目的,使他们成为令人信服和教学的有力工具。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XH3RbSsOloN7GBxPOnocSJDznEc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" rotation="180" alpha="0.75" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(0, 0, 0, 0.5) 0%,rgba(0, 0, 0, 0.3) 22%,rgba(0, 0, 0, 0.65) 100%)"/> - </fill> - </shape> - <shape width="261" height="101" topLeftX="267" topLeftY="220" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="58" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.4">谢谢观看</p> - </content> - <shadow offset="8" angle="90" blur="10" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="139" height="47" topLeftX="554" topLeftY="247" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">汇报人:XXX</span> - </p> - </content> - <shadow offset="8" angle="90" blur="10" color="rgba(0, 0, 0, 0.05)"/> - </shape> - <shape width="2" height="80" topLeftX="534" topLeftY="230" alpha="0.6" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0) 0%,rgba(236, 255, 255, 0.8) 17%,rgba(233, 219, 255, 0.9) 50%,rgba(216, 225, 255, 0.8) 85%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--light_general.xml b/skills/lark-slides/assets/templates/office--light_general.xml deleted file mode 100644 index 87c126f06..000000000 --- a/skills/lark-slides/assets/templates/office--light_general.xml +++ /dev/null @@ -1,3378 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>白底通用模板 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style/> - <data> - <shape width="668" height="36" topLeftX="100" topLeftY="293" type="text"> - <content textType="headline" fontSize="24" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>通用模板副标题</p> - </content> - </shape> - <shape width="668" height="66" topLeftX="100" topLeftY="229" type="text"> - <content textType="headline" fontSize="44" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>通用模板</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="OpAVbV1zhoQbSQx1DCCcVYypnDb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="818" height="24" topLeftX="70" topLeftY="448" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>通用模板副标题</p> - </content> - </shape> - <shape width="818" height="48" topLeftX="70" topLeftY="397" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>通用模板</p> - </content> - </shape> - <shape width="818" height="21" topLeftX="70" topLeftY="98" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>日期:XX.XX</p> - </content> - </shape> - <shape width="818" height="21" topLeftX="70" topLeftY="73" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>作者:XXX</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - </style> - <data> - <shape width="200" height="260" topLeftX="41" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="200" height="260" topLeftX="267" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="200" height="260" topLeftX="493" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="200" height="260" topLeftX="719" topLeftY="181" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="164" height="52" topLeftX="59" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">01.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="52" topLeftX="285" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">02.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="52" topLeftX="511" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">03.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="52" topLeftX="737" topLeftY="215" type="text"> - <content paddingTop="10" paddingBottom="10" fontSize="32" fontFamily="Arial Black" color="rgba(78, 110, 253, 1)" italic="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <em> - <span color="rgba(78, 110, 253, 1)" fontSize="32" fontFamily="Arial Black">04.</span> - </em> - </p> - </content> - </shape> - <shape width="164" height="105" topLeftX="737" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="737" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="164" height="105" topLeftX="511" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="511" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="164" height="105" topLeftX="285" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="285" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="164" height="105" topLeftX="59" topLeftY="311" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="164" height="24" topLeftX="59" topLeftY="278" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="818" height="48" topLeftX="70" topLeftY="88" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="40" height="40" topLeftX="100" topLeftY="198" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 0.922)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontSize="14" fontFamily="Arial">01</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="505" topLeftY="198" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 0.922)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontFamily="Arial">02</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="100" topLeftY="287" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 0.922)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontFamily="Arial">03</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="505" topLeftY="287" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 0.922)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontFamily="Arial">04</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="100" topLeftY="375" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 0.922)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontFamily="Arial">05</span> - </strong> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="505" topLeftY="375" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 0.922)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.922)" fontFamily="Arial">06</span> - </strong> - </p> - </content> - </shape> - <shape width="300" height="27" topLeftX="155" topLeftY="382" type="text"> - <content fontSize="18" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="155" topLeftY="293" type="text"> - <content fontSize="18" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="560" topLeftY="382" type="text"> - <content fontSize="18" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="560" topLeftY="293" type="text"> - <content fontSize="18" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="560" topLeftY="205" type="text"> - <content fontSize="18" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="300" height="27" topLeftX="155" topLeftY="205" type="text"> - <content fontSize="18" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="760" height="48" topLeftX="100" topLeftY="108" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="MhPNbCRWsoCTBvxtoRzc4VrYnse" width="450" height="540" topLeftX="510" topLeftY="0"> - <crop type="rect" leftOffset="257" rightOffset="257" topOffset="0" bottomOffset="0"/> - </img> - <shape width="376" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>目录</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="411" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p>06</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="411" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="358" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p>05</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="358" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="306" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p>04</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="306" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="253" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p>03</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="253" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="201" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p>02</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="201" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="27" topLeftX="70" topLeftY="149" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p>01</p> - </content> - </shape> - <shape width="330" height="27" topLeftX="116" topLeftY="149" type="text"> - <content fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="480" startY="98" endX="890" endY="98" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="127" endX="890" endY="127" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="156" endX="890" endY="156" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="203" endX="890" endY="203" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="232" endX="890" endY="232" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="261" endX="890" endY="261" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="308" endX="890" endY="308" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="337" endX="890" endY="337" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="366" endX="890" endY="366" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="413" endX="890" endY="413" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="442" endX="890" endY="442" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="471" endX="890" endY="471" alpha="0.4"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="24" height="18" topLeftX="865" topLeftY="448" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>32</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="419" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>30</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="385" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p>29</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="448" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="419" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="385" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="343" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>27</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="314" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>23</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="280" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p>22</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="314" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="280" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="238" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>20</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="209" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>15</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="175" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p>14</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="238" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="209" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="175" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="133" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>08</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="104" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(100, 102, 107, 1)" bold="false" textAlign="right"> - <p>04</p> - </content> - </shape> - <shape width="24" height="18" topLeftX="865" topLeftY="70" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p>03</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="133" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="18" topLeftX="480" topLeftY="104" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p>子目录</p> - </content> - </shape> - <shape width="380" height="21" topLeftX="480" topLeftY="70" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true"> - <p>目录标题</p> - </content> - </shape> - <shape width="400" height="32" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1">目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="760" height="86" topLeftX="100" topLeftY="227" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="44" color="rgba(48, 48, 48, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(48, 48, 48, 1)">通用模板标题</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="760" height="36" topLeftX="100" topLeftY="287" type="text"> - <content textType="caption" fontSize="24" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>通用模板标题</p> - </content> - </shape> - <shape width="760" height="66" topLeftX="100" topLeftY="217" type="text"> - <content textType="caption" fontSize="44" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>通用模板标题</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="760" height="72" topLeftX="100" topLeftY="352" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="72" topLeftX="100" topLeftY="262" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="54" topLeftX="100" topLeftY="190" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="48" topLeftX="100" topLeftY="100" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="390" height="90" topLeftX="500" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="30" topLeftX="500" topLeftY="240" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="390" height="30" topLeftX="70" topLeftY="240" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="390" height="90" topLeftX="70" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="760" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="240" height="30" topLeftX="360" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="90" topLeftX="360" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="650" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="90" topLeftX="650" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="70" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="90" topLeftX="70" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="180" height="30" topLeftX="497" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="497" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="180" height="30" topLeftX="283" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="283" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="180" height="30" topLeftX="710" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="710" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="180" height="30" topLeftX="70" topLeftY="240" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="180" height="90" topLeftX="70" topLeftY="280" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="360" topLeftY="320" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题五</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="360" topLeftY="360" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="650" topLeftY="320" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题六</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="650" topLeftY="360" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="70" topLeftY="320" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="360" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="650" topLeftY="169" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="650" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="360" topLeftY="169" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="360" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="30" topLeftX="70" topLeftY="168" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="470" height="30" topLeftX="420" topLeftY="350" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="470" height="54" topLeftX="420" topLeftY="393" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="470" height="30" topLeftX="420" topLeftY="227" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="470" height="54" topLeftX="420" topLeftY="270" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="470" height="30" topLeftX="420" topLeftY="104" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="470" height="54" topLeftX="420" topLeftY="147" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="300" height="48" topLeftX="70" topLeftY="246" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <icon width="32" height="32" topLeftX="337" topLeftY="102" iconType="iconpark/Base/camera.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="32" height="32" topLeftX="631" topLeftY="102" iconType="iconpark/Office/agreement.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="32" height="32" topLeftX="337" topLeftY="293" iconType="iconpark/Office/schedule.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="32" height="32" topLeftX="631" topLeftY="293" iconType="iconpark/Clothes/clothes-sweater.svg"> - <border color="rgba(31, 35, 41, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="260" height="24" topLeftX="631" topLeftY="339" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="631" topLeftY="373" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="260" height="24" topLeftX="337" topLeftY="339" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="337" topLeftY="373" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="260" height="24" topLeftX="631" topLeftY="146" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="631" topLeftY="180" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="260" height="24" topLeftX="337" topLeftY="146" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="260" height="72" topLeftX="337" topLeftY="180" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="233" height="48" topLeftX="70" topLeftY="246" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="32" height="32" topLeftX="70" topLeftY="173" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="14" fontFamily="Arial" italic="false">01</span> - </strong> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="500" topLeftY="173" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="14" fontFamily="Arial" italic="false">02</span> - </strong> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="70" topLeftY="324" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="14" fontFamily="Arial" italic="false">03</span> - </strong> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="500" topLeftY="324" presetHandlers="4" type="round-rect"> - <border color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true" italic="false"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="14" fontFamily="Arial" italic="false">04</span> - </strong> - </p> - </content> - </shape> - <shape width="390" height="24" topLeftX="500" topLeftY="372" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="500" topLeftY="406" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="70" topLeftY="372" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="70" topLeftY="406" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="500" topLeftY="221" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="500" topLeftY="255" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="70" topLeftY="221" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="70" topLeftY="255" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="46" height="46" topLeftX="70" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="187" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="187" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="333" iconType="iconpark/Emoji/smiling-face-with-squinting-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="333" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="330" height="24" topLeftX="560" topLeftY="322" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="356" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="322" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="356" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="560" topLeftY="176" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="176" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="210" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="187" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="176" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="187" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="333" iconType="iconpark/Emoji/smiling-face-with-squinting-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="322" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="333" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - </style> - <data> - <shape width="253" height="323" topLeftX="70" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="46" height="46" topLeftX="92" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="103" topLeftY="183" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="253" height="323" topLeftX="353" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="46" height="46" topLeftX="375" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="386" topLeftY="183" iconType="iconpark/Emoji/smiling-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="253" height="323" topLeftX="637" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="46" height="46" topLeftX="659" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="670" topLeftY="183" iconType="iconpark/Emoji/distraught-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="210" height="24" topLeftX="659" topLeftY="247" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="210" height="144" topLeftX="659" topLeftY="281" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" lineSpacing="multiple:2" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="210" height="24" topLeftX="375" topLeftY="247" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="210" height="144" topLeftX="375" topLeftY="281" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" lineSpacing="multiple:2" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="210" height="24" topLeftX="91" topLeftY="247" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="210" height="144" topLeftX="91" topLeftY="281" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" lineSpacing="multiple:2" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p>输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="92" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="103" topLeftY="183" iconType="iconpark/Emoji/winking-face-with-open-eyes.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="375" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="386" topLeftY="183" iconType="iconpark/Emoji/smiling-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="659" topLeftY="172" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="670" topLeftY="183" iconType="iconpark/Emoji/distraught-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - </style> - <data> - <shape width="253" height="140" topLeftX="70" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="353" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="637" topLeftY="147" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="70" topLeftY="316" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="353" topLeftY="316" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="253" height="140" topLeftX="637" topLeftY="316" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.84)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow angle="90" blur="40" color="rgba(147, 150, 156, 0.2)"/> - </shape> - <shape width="210" height="24" topLeftX="659" topLeftY="342" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题六</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="659" topLeftY="376" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="375" topLeftY="342" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题五</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="375" topLeftY="376" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="92" topLeftY="342" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题四</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="92" topLeftY="376" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="659" topLeftY="173" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="659" topLeftY="207" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="375" topLeftY="173" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="375" topLeftY="207" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="210" height="24" topLeftX="92" topLeftY="173" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="210" height="54" topLeftX="92" topLeftY="207" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="UdtdbZbpKoaEEexUz07c9OHVnMd" width="961" height="395" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="72" bottomOffset="72"/> - </img> - <shape width="820" height="30" topLeftX="70" topLeftY="477" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" bold="true" textAlign="center"> - <p>副标题</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="426" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="center"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="RUV0bZ37YouKpjxf4VKckdjhn6e" width="820" height="308" topLeftX="70" topLeftY="162"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="76" bottomOffset="76" presetHandlers="12"/> - </img> - <shape width="606" height="63" topLeftX="284" topLeftY="70" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="200" height="48" topLeftX="70" topLeftY="78" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="N61xbdsLro9jPzxFdaNcTyCjnNe" width="427" height="540" topLeftX="533" topLeftY="0"> - <crop type="rect" leftOffset="268" rightOffset="268" topOffset="0" bottomOffset="0"/> - </img> - <shape width="390" height="72" topLeftX="70" topLeftY="395" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="36" topLeftX="70" topLeftY="339" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="247" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="30" topLeftX="70" topLeftY="122" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>副标题</p> - </content> - </shape> - <shape width="390" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="B1fHbkd1voF2iGxyg0mc66LGnDb" width="360" height="400" topLeftX="530" topLeftY="70"> - <crop type="rect" leftOffset="177" rightOffset="177" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="390" height="30" topLeftX="70" topLeftY="213" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="255" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="46" height="46" topLeftX="499" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="156" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="266" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="277" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="386" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="397" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="NK3ObUBQqocaMkxlLt2cr5C1nNf" width="427" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="268" rightOffset="268" topOffset="0" bottomOffset="0"/> - </img> - <shape width="330" height="24" topLeftX="560" topLeftY="386" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="420" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="560" topLeftY="265" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="299" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="560" topLeftY="145" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="560" topLeftY="179" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="48" topLeftX="500" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="499" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="156" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="266" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="277" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="499" topLeftY="386" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="510" topLeftY="397" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="46" height="46" topLeftX="70" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">01</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="228" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">02</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="311" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">03</span> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="394" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">04</span> - </p> - </content> - </shape> - <img src="Cpjjb7QKFohJzixFmudcveLanec" width="360" height="400" topLeftX="530" topLeftY="70"> - <crop type="rect" leftOffset="177" rightOffset="177" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="340" height="54" topLeftX="131" topLeftY="394" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="340" height="54" topLeftX="131" topLeftY="311" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="340" height="54" topLeftX="131" topLeftY="228" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="340" height="54" topLeftX="131" topLeftY="145" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="401" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="UrinbB8Q4oj0LkxoOkfcJ1KinVc" width="160" height="312" topLeftX="422" topLeftY="151"> - <crop type="rect" leftOffset="198" rightOffset="198" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="XFbNbpyKtouApzx0zevcG7txnhf" width="160" height="312" topLeftX="246" topLeftY="151"> - <crop type="rect" leftOffset="198" rightOffset="198" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="HWkXbtsmuoiDjpxPJDTcLH7Hnsc" width="160" height="312" topLeftX="70" topLeftY="151"> - <crop type="rect" leftOffset="198" rightOffset="198" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="270" height="24" topLeftX="620" topLeftY="375" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="270" height="54" topLeftX="620" topLeftY="409" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="270" height="24" topLeftX="620" topLeftY="263" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="270" height="54" topLeftX="620" topLeftY="297" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="270" height="24" topLeftX="620" topLeftY="147" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="270" height="54" topLeftX="620" topLeftY="181" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="Ndgob5bcsoqoMTxOmz1c6z0vnYc" width="390" height="192" topLeftX="500" topLeftY="150"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="13" bottomOffset="13" presetHandlers="12"/> - </img> - <img src="MUwyb6SnjoQTwuxiOB1cL6MYnTp" width="390" height="192" topLeftX="70" topLeftY="150"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="13" bottomOffset="13" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="500" topLeftY="368" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="500" topLeftY="402" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="390" height="24" topLeftX="70" topLeftY="368" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="402" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="JWmUbcsENoCPNgxmG61cOXArnTb" width="240" height="120" topLeftX="650" topLeftY="187"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <img src="CeeobQbgaoWXlkxOhXYcu0rgnhd" width="240" height="120" topLeftX="360" topLeftY="187"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <img src="DMsebV7EnoQocLxkLz3cyl9jned" width="240" height="120" topLeftX="70" topLeftY="187"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="650" topLeftY="334" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="368" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="334" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="368" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="334" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="368" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="AAOvbGpghofRb3xgLUscy8kJnHb" width="240" height="120" topLeftX="70" topLeftY="281"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <img src="HpHabXmYbo3v7YxIybRcGBqmn9K" width="240" height="120" topLeftX="650" topLeftY="281"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <img src="QnC9b6Au9owetoxxL1bcLxk7nlc" width="240" height="120" topLeftX="360" topLeftY="281"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="7" bottomOffset="7" presetHandlers="12"/> - </img> - <shape width="240" height="24" topLeftX="650" topLeftY="174" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="208" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="174" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="208" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="174" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="208" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="LaQAbab0ToMFZHx2vcFcekoDnfj" width="190" height="190" topLeftX="70" topLeftY="280"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="VZIib07cQojdKyxxadWcg1EOn4f" width="190" height="190" topLeftX="280" topLeftY="280"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="RwdhbPR67orsSQxUItvcZ1GDn9g" width="190" height="190" topLeftX="70" topLeftY="70"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="IBgNbWYZdoW4cvxJ7KOczv96npc" width="190" height="190" topLeftX="280" topLeftY="70"> - <crop type="rect" leftOffset="75" rightOffset="75" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="360" height="126" topLeftX="530" topLeftY="344" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="48" topLeftX="530" topLeftY="280" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="KMPwbZANDoM8VtxikwbcdgtYn6e" width="175" height="249" topLeftX="715" topLeftY="380"> - <crop type="rect" leftOffset="135" rightOffset="135" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="QZLubWOb5ou0jGxHuK8cvyovnuU" width="175" height="140" topLeftX="715" topLeftY="223"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="EOA1bzkFOodgKJxRt32cGkiPn5b" width="175" height="249" topLeftX="715" topLeftY="-43"> - <crop type="rect" leftOffset="135" rightOffset="135" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Qv1eb4EBRoTyBtxYhWScsA9pnUe" width="175" height="140" topLeftX="523" topLeftY="-43"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="DaV6bjvbooZq39xWX6CcD5I8nFh" width="175" height="140" topLeftX="523" topLeftY="426"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="OE5nb3nAgoEZPCxtAzycCV03ns4" width="175" height="140" topLeftX="523" topLeftY="269"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Eg5Ob6bqZoXa2cxL1sYcUjXZnnh" width="175" height="140" topLeftX="523" topLeftY="113"> - <crop type="rect" leftOffset="37" rightOffset="37" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="400" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="379" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="413" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="269" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="303" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="24" topLeftX="70" topLeftY="161" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="400" height="36" topLeftX="70" topLeftY="195" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="CVlxbnjeXoXmyvxizbIcyhEAnkc" width="240" height="329" topLeftX="650" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="BGQQbKBsxoZ6a9xwCUzcfvsinSJ" width="240" height="329" topLeftX="360" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="NAo6bVZokosccOxFzWic0xdEnWe" width="240" height="329" topLeftX="70" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="CUMbbcVlnoM4sfxUEC1cHXCRn5e" width="551" height="150" topLeftX="339" topLeftY="320"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="79" bottomOffset="79" presetHandlers="12"/> - </img> - <img src="JTi1binYYoah0fxefx2cw73Rnuf" width="551" height="150" topLeftX="339" topLeftY="141"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="79" bottomOffset="79" presetHandlers="12"/> - </img> - <img src="Ic1UbbFDroNj15xyXrFc13jvnPf" width="240" height="329" topLeftX="70" topLeftY="141"> - <crop type="rect" leftOffset="173" rightOffset="173" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="TOsLbMBi6olv5txLhV8cxP83nbi" width="190" height="152" topLeftX="280" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="FlAcbO793o38sCxU9GrcmIyxnbd" width="190" height="152" topLeftX="70" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="YS8AbcHFNoetRkxihPcc4s5Dnte" width="190" height="152" topLeftX="700" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="V67bb63eYox1eHxtKmPcHF7FnFh" width="190" height="152" topLeftX="490" topLeftY="312"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="TV3DbPu8loC75UxSlQIcHleznVe" width="190" height="152" topLeftX="700" topLeftY="139"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="TtcYba7nLoI5cexx4DDcsVuHnsd" width="190" height="152" topLeftX="490" topLeftY="139"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="KdSsbBljKocygSxfL1EcIF7Mnog" width="190" height="152" topLeftX="280" topLeftY="141"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="L3Gsb31ZAogVLVx2HCtcunn9n1X" width="190" height="152" topLeftX="70" topLeftY="141"> - <crop type="rect" leftOffset="41" rightOffset="41" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="838" height="28" topLeftX="51" topLeftY="295" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(271deg,rgba(35, 72, 197, 0.38) 0%,rgba(72, 239, 207, 0.11) 100%)"/> - </fill> - </shape> - <shape width="12" height="12" topLeftX="86" topLeftY="303" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="249" startY="319" endX="249" endY="402"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="12" height="12" topLeftX="400" topLeftY="303" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="16" height="16" topLeftX="551" topLeftY="301" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="685" topLeftY="303" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="559" startY="317" endX="559" endY="403"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="16" height="16" topLeftX="241" topLeftY="301" type="ellipse"> - <border color="rgba(78, 110, 253, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="406" startY="175" endX="406" endY="301"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="691" startY="175" endX="691" endY="301"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="91" startY="175" endX="91" endY="301"> - <border color="rgba(78, 110, 253, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="215" height="24" topLeftX="268" topLeftY="360" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="268" topLeftY="394" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="578" topLeftY="360" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="578" topLeftY="394" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="710" topLeftY="162" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="710" topLeftY="197" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="425" topLeftY="162" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="425" topLeftY="197" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="215" height="24" topLeftX="110" topLeftY="162" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间点</p> - </content> - </shape> - <shape width="215" height="54" topLeftX="110" topLeftY="197" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间轴</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <undefined type="fallback"/> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>时间轴</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="120" startY="159" endX="120" endY="451" alpha="0.4"> - <border color="rgba(78, 110, 253, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="100" height="34" topLeftX="70" topLeftY="381" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>2024-2026</p> - </content> - </shape> - <shape width="100" height="34" topLeftX="70" topLeftY="287" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>2022-2023</p> - </content> - </shape> - <shape width="100" height="34" topLeftX="70" topLeftY="193" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>2020-2021</p> - </content> - </shape> - <shape width="160" height="24" topLeftX="211" topLeftY="386" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="480" height="54" topLeftX="410" topLeftY="371" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="160" height="24" topLeftX="211" topLeftY="292" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="480" height="54" topLeftX="410" topLeftY="277" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="480" height="54" topLeftX="410" topLeftY="183" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="160" height="24" topLeftX="211" topLeftY="198" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>时间轴</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="188" height="24" topLeftX="516" topLeftY="144" type="text"> - <content fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">数据标题</span> - </strong> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="516" topLeftY="175" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="274" height="20" topLeftX="519" topLeftY="178" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="24" topLeftX="825" topLeftY="144" type="text"> - <content fontSize="16" color="rgba(78, 110, 253, 1)" bold="true" textAlign="right"> - <p textAlign="right"> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="16">67%</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="24" topLeftX="516" topLeftY="241" type="text"> - <content fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">数据标题</span> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="516" topLeftY="272" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="357" height="20" topLeftX="519" topLeftY="275" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="26" topLeftX="825" topLeftY="241" type="text"> - <content fontSize="17" color="rgba(78, 110, 253, 1)" bold="true" textAlign="right"> - <p textAlign="right"> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="17">98%</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="24" topLeftX="516" topLeftY="341" type="text"> - <content fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">数据标题</span> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="516" topLeftY="372" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="174" height="20" topLeftX="519" topLeftY="375" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="26" topLeftX="825" topLeftY="341" type="text"> - <content fontSize="17" color="rgba(78, 110, 253, 1)" bold="true" textAlign="right"> - <p textAlign="right"> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="17">43%</span> - </strong> - </p> - </content> - </shape> - <shape width="380" height="48" topLeftX="70" topLeftY="154" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p textAlign="left">标题和描述</p> - </content> - </shape> - <shape width="380" height="54" topLeftX="70" topLeftY="222" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="380" height="90" topLeftX="70" topLeftY="296" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(48, 48, 48, 1)" bold="true"> - <p> - <span fontSize="32" fontFamily="思源黑体">标题和描述</span> - </p> - </content> - </shape> - <undefined type="chart_refer_host_perm"/> - <undefined type="chart_refer_host_perm"/> - <undefined type="chart_refer_host_perm"/> - <shape width="240" height="24" topLeftX="650" topLeftY="165" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(51, 51, 51, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="199" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="165" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(51, 51, 51, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="199" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="165" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(51, 51, 51, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="199" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <undefined type="chart_refer_host_perm"/> - <shape width="330" height="24" topLeftX="131" topLeftY="386" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(51, 51, 51, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="420" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="265" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(51, 51, 51, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="299" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="330" height="24" topLeftX="131" topLeftY="145" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(51, 51, 51, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="330" height="54" topLeftX="131" topLeftY="179" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="70" topLeftY="145" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="156" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="266" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="277" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="70" topLeftY="386" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="81" topLeftY="397" iconType="iconpark/Emoji/grinning-face-with-tightly-closed-eyes-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="391" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(48, 48, 48, 1)" bold="true"> - <p> - <span fontSize="32" fontFamily="思源黑体">标题和描述</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <table topLeftX="70" topLeftY="152"> - <colgroup> - <col span="4" width="205"/> - </colgroup> - <tr height="53"> - <td> - <borderTop color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="思源黑体">标题</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>项目一</p> - </content> - </td> - <td> - <borderTop color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="Arial">项目二</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14" fontFamily="思源黑体">相关细节</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" bold="true"> - <p> - <strong> - <span fontSize="14" fontFamily="思源黑体">标题</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">30M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">32M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p> - <span color="rgba(100, 102, 107, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" bold="true"> - <p> - <span fontFamily="思源黑体">标题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">45M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">40M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p> - <span color="rgba(100, 102, 107, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" bold="true"> - <p> - <span fontFamily="思源黑体">标题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">15M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">30M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p> - <span color="rgba(100, 102, 107, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="60"> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" bold="true"> - <p> - <span fontFamily="思源黑体">标题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">60M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="Arial" bold="true"> - <p> - <strong> - <span fontSize="12" fontFamily="Arial">66M</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(78, 110, 253, 1)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="0" paddingBottom="0" paddingLeft="0" paddingRight="0" fontSize="14" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)"> - <p> - <span color="rgba(100, 102, 107, 1)" fontSize="12" fontFamily="思源黑体">更多细节描述</span> - </p> - </content> - </td> - </tr> - </table> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="390" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(48, 48, 48, 1)" bold="true"> - <p> - <span color="rgba(48, 48, 48, 1)" fontSize="32" fontFamily="思源黑体">标题和描述</span> - </p> - </content> - </shape> - <img src="BhwkbrUYDoICFDxn2bYcuCpGnsd" width="427" height="540" topLeftX="533" topLeftY="0"> - <crop type="rect" leftOffset="268" rightOffset="268" topOffset="0" bottomOffset="0"/> - </img> - <shape width="120" height="18" topLeftX="70" topLeftY="331" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(100, 102, 107, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="70" topLeftY="267" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true"> - <p> - <span fontSize="44" fontFamily="Arial">2,080</span> - </p> - </content> - </shape> - <shape width="120" height="18" topLeftX="265" topLeftY="331" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(100, 102, 107, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="265" topLeftY="267" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true"> - <p> - 89 - <span fontSize="24">%</span> - </p> - </content> - </shape> - <shape width="120" height="18" topLeftX="70" topLeftY="444" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(100, 102, 107, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="70" topLeftY="380" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true"> - <p> - <span fontSize="44" fontFamily="Arial">1,562</span> - </p> - </content> - </shape> - <shape width="120" height="18" topLeftX="265" topLeftY="444" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(100, 102, 107, 1)" fontSize="12" bold="false">关键数据</span> - </p> - </content> - </shape> - <shape width="120" height="66" topLeftX="265" topLeftY="380" type="text"> - <content textType="headline" fontSize="44" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true"> - <p>76</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="105" height="90" topLeftX="70" topLeftY="209" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span fontSize="60" fontFamily="Arial">98</span> - <span fontSize="38" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="260" height="18" topLeftX="70" topLeftY="194" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="left"> - <p textAlign="left"> - <span fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="18" topLeftX="70" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="left"> - <p textAlign="left"> - <span fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="57" topLeftX="70" topLeftY="358" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true" textAlign="left"> - <p textAlign="left">2,080</p> - </content> - </shape> - <shape width="200" height="18" topLeftX="380" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="left"> - <p textAlign="left"> - <span fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="57" topLeftX="380" topLeftY="358" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true" textAlign="left"> - <p textAlign="left">6,098</p> - </content> - </shape> - <shape width="200" height="18" topLeftX="690" topLeftY="343" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="left"> - <p textAlign="left"> - <span fontFamily="思源黑体">关键数据</span> - </p> - </content> - </shape> - <shape width="200" height="57" topLeftX="690" topLeftY="358" type="text"> - <content textType="sub-headline" fontSize="38" fontFamily="Arial" color="rgba(48, 48, 48, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - 78 - <span fontSize="24">%</span> - </p> - </content> - </shape> - <line startX="890" startY="306" endX="70" endY="306"> - <border color="rgba(208, 211, 214, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="42" height="36" topLeftX="175" topLeftY="244" type="text"> - <content fontSize="16" color="rgba(78, 110, 253, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(78, 110, 253, 1)" fontSize="24">↑</span> - </strong> - </p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="120" height="120" topLeftX="130" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">2,080</span> - </p> - </content> - </shape> - <shape width="120" height="120" topLeftX="420" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">6,098</span> - </p> - </content> - </shape> - <shape width="120" height="120" topLeftX="710" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">98%</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="338" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12" fontFamily="思源黑体">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="300" type="text"> - <content textType="sub-headline" fontSize="16" color="rgba(48, 48, 48, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(48, 48, 48, 1)" fontSize="16">关键数据</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="338" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12" fontFamily="思源黑体">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="300" type="text"> - <content textType="sub-headline" fontSize="16" color="rgba(48, 48, 48, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span fontSize="16">关键数据</span> - </p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="338" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12" fontFamily="思源黑体">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="240" height="24" topLeftX="650" topLeftY="300" type="text"> - <content textType="sub-headline" fontSize="16" color="rgba(48, 48, 48, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span fontSize="16">关键数据</span> - </p> - </content> - </shape> - <shape width="820" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="TS3obuM9uoiDLLxgxw7cdpVRnDb" width="194" height="389" topLeftX="609" topLeftY="76"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="UHSabFVFBoL8PzxboqFc1wIine9" width="162" height="353" topLeftX="626" topLeftY="89"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <shape width="472" height="30" topLeftX="70" topLeftY="205" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="472" height="72" topLeftX="70" topLeftY="245" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="TS3obuM9uoiDLLxgxw7cdpVRnDb" width="316" height="633" topLeftX="529" topLeftY="76"> - <crop type="rect" leftOffset="128" rightOffset="130" topOffset="18" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="WTL3bP2ZYo7hcexcplTczqrXn3b" width="264" height="574" topLeftX="557" topLeftY="95"> - <crop type="rect" leftOffset="381" rightOffset="381" topOffset="0" bottomOffset="0" presetHandlers="38"/> - </img> - <shape width="360" height="24" topLeftX="70" topLeftY="375" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题三</p> - </content> - </shape> - <shape width="360" height="36" topLeftX="70" topLeftY="409" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="24" topLeftX="70" topLeftY="263" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="360" height="36" topLeftX="70" topLeftY="297" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="24" topLeftX="70" topLeftY="147" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="360" height="36" topLeftX="70" topLeftY="181" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="360" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="390" startY="166" endX="320" endY="166"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="390" startY="279" endX="320" endY="279"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="390" startY="392" endX="320" endY="392"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="573" startY="218" endX="643" endY="218"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <line startX="573" startY="320" endX="643" endY="320"> - <border color="rgba(100, 102, 107, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <startArrow type="solid-circle"/> - </line> - <img src="TS3obuM9uoiDLLxgxw7cdpVRnDb" width="194" height="389" topLeftX="383" topLeftY="83"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="OYjWbO3vzo5RXLxneqxcGkcrnog" width="162" height="353" topLeftX="400" topLeftY="96"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <shape width="240" height="72" topLeftX="654" topLeftY="284" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="654" topLeftY="180" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="356" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="243" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="72" topLeftX="70" topLeftY="131" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="TS3obuM9uoiDLLxgxw7cdpVRnDb" width="194" height="389" topLeftX="67" topLeftY="83"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="TS3obuM9uoiDLLxgxw7cdpVRnDb" width="194" height="389" topLeftX="276" topLeftY="83"> - <crop type="rect" leftOffset="79" rightOffset="80" topOffset="11" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="46" height="46" topLeftX="517" topLeftY="211" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="222" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="517" topLeftY="331" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="342" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="Q2FybbJISoe4gJxBqCZcdcGLnt7" width="162" height="353" topLeftX="293" topLeftY="96"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <img src="Io74bsywQorRoYxblTecisEgnlg" width="162" height="353" topLeftX="84" topLeftY="96"> - <crop type="rect" leftOffset="234" rightOffset="234" topOffset="0" bottomOffset="0" presetHandlers="22"/> - </img> - <shape width="310" height="24" topLeftX="578" topLeftY="331" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题二</p> - </content> - </shape> - <shape width="310" height="54" topLeftX="578" topLeftY="365" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="310" height="24" topLeftX="578" topLeftY="210" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题一</p> - </content> - </shape> - <shape width="310" height="54" topLeftX="578" topLeftY="244" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="370" height="48" topLeftX="518" topLeftY="135" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="517" topLeftY="211" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="222" iconType="iconpark/Emoji/relieved-face.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="46" height="46" topLeftX="517" topLeftY="331" presetHandlers="23" type="round-rect"> - <fill> - <fillColor color="rgba(78, 110, 253, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="528" topLeftY="342" iconType="iconpark/Emoji/grinning-face-with-open-mouth.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="Rhy4b1ms1oQzsJx1OiicAr7HnNh" width="151" height="302" topLeftX="115" topLeftY="70"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="Rhy4b1ms1oQzsJx1OiicAr7HnNh" width="151" height="302" topLeftX="405" topLeftY="70"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="Rhy4b1ms1oQzsJx1OiicAr7HnNh" width="151" height="302" topLeftX="694" topLeftY="70"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="IkNBba1tKov0OcxMu7pcottvnLf" width="127" height="277" topLeftX="707" topLeftY="78"> - <crop type="rect" leftOffset="183" rightOffset="183" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="BzuMbFf9SoFq5Zx1R0wcIJZznFh" width="127" height="277" topLeftX="417" topLeftY="78"> - <crop type="rect" leftOffset="183" rightOffset="183" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <img src="QKaEb8jPBo2oRjxJtgvcD6gVndd" width="127" height="277" topLeftX="127" topLeftY="78"> - <crop type="rect" leftOffset="183" rightOffset="183" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - <shape width="240" height="24" topLeftX="650" topLeftY="381" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>主题标题三</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="650" topLeftY="415" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="center"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="360" topLeftY="381" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>主题标题二</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="360" topLeftY="415" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="center"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="240" height="24" topLeftX="70" topLeftY="381" type="text"> - <content textType="caption" fontSize="16" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p>主题标题一</p> - </content> - </shape> - <shape width="240" height="54" topLeftX="70" topLeftY="415" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="center"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="JiksbRvHYoWRPxxBUYNcSuGZnjc" width="595" height="359" topLeftX="182" topLeftY="95" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="KCLSbcQRPojNiIxEZNncl3bxnQc" width="477" height="321" topLeftX="242" topLeftY="104"> - <crop type="rect" leftOffset="48" rightOffset="48" topOffset="0" bottomOffset="0" presetHandlers="10"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="JiksbRvHYoWRPxxBUYNcSuGZnjc" width="595" height="359" topLeftX="451" topLeftY="95" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="T4o1bdSsuo4rXRxygYfc73h6nbe" width="477" height="321" topLeftX="511" topLeftY="104"> - <crop type="rect" leftOffset="48" rightOffset="48" topOffset="0" bottomOffset="0" presetHandlers="10"/> - </img> - <shape width="390" height="30" topLeftX="70" topLeftY="210" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="390" height="72" topLeftX="70" topLeftY="250" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="JiksbRvHYoWRPxxBUYNcSuGZnjc" width="790" height="477" topLeftX="10" topLeftY="180" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="820" height="30" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>主题标题</p> - </content> - </shape> - <shape width="820" height="36" topLeftX="70" topLeftY="110" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <img src="VpaZbZ7K9oKUdCxODBVcIZ7ln5b" width="633" height="426" topLeftX="88" topLeftY="190"> - <crop type="rect" leftOffset="64" rightOffset="64" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="Rhy4b1ms1oQzsJx1OiicAr7HnNh" width="205" height="412" topLeftX="667" topLeftY="283"> - <crop type="rect" leftOffset="83" rightOffset="85" topOffset="12" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="ADcsbOc5xoAjRxx4RbLchlm7nsg" width="172" height="374" topLeftX="685" topLeftY="296"> - <crop type="rect" leftOffset="248" rightOffset="248" topOffset="0" bottomOffset="0" presetHandlers="24"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="400" height="90" topLeftX="70" topLeftY="371" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="54" topLeftX="70" topLeftY="294" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="400" height="30" topLeftX="70" topLeftY="118" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>副标题</p> - </content> - </shape> - <shape width="400" height="48" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>标题和描述</p> - </content> - </shape> - <img src="JiksbRvHYoWRPxxBUYNcSuGZnjc" width="595" height="359" topLeftX="544" topLeftY="95" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="TacibFO8eoOOhqxBubBchT75nTd" width="477" height="321" topLeftX="603" topLeftY="104"> - <crop type="rect" leftOffset="48" rightOffset="48" topOffset="0" bottomOffset="0" presetHandlers="10"/> - </img> - <img src="Rhy4b1ms1oQzsJx1OiicAr7HnNh" width="151" height="302" topLeftX="499" topLeftY="197"> - <crop type="rect" leftOffset="61" rightOffset="62" topOffset="9" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="BMJpb7YAvoeKgdxBAoQcsX6Gn6e" width="126" height="275" topLeftX="513" topLeftY="206"> - <crop type="rect" leftOffset="182" rightOffset="182" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="CPicb3HffodDqFxKjLmcD6ubnuh" width="653" height="540" topLeftX="307" topLeftY="0"> - <crop type="rect" leftOffset="155" rightOffset="155" topOffset="0" bottomOffset="0"/> - </img> - <shape width="180" height="48" topLeftX="70" topLeftY="423" type="text"> - <content textType="caption" fontSize="32" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>谢谢观看</p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="270" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>湖北省 武汉市 洪山区</p> - </content> - </shape> - <shape width="180" height="18" topLeftX="70" topLeftY="252" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>联系地址</p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="192" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(78, 110, 253, 1)" bold="true" textAlign="left"> - <p> - <a href="mailto:sherry@gmail.com"> - <span color="rgba(78, 110, 253, 1)">Sherry@gmail.com</span> - </a> - </p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="167" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>+132 9792 710X</p> - </content> - </shape> - <shape width="180" height="18" topLeftX="70" topLeftY="149" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>联系方式</p> - </content> - </shape> - <shape width="180" height="27" topLeftX="70" topLeftY="88" type="text"> - <content textType="caption" fontSize="18" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p>XXX</p> - </content> - </shape> - <shape width="180" height="18" topLeftX="70" topLeftY="70" type="text"> - <content textType="caption" fontSize="12" fontFamily="思源黑体" color="rgba(100, 102, 107, 1)" bold="false" textAlign="left"> - <p>联系人</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--project_kickoff.xml b/skills/lark-slides/assets/templates/office--project_kickoff.xml deleted file mode 100644 index 870d537f1..000000000 --- a/skills/lark-slides/assets/templates/office--project_kickoff.xml +++ /dev/null @@ -1,3152 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>项目启动宣讲 - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - LOGO - -

-
-
- - - - - -

- 背景同步 -

-
-
- - -

项目方案

-
-
- - -

成本预估

-
-
- - -

产品线路图

-
-
- - -

- Project Kickoff Presentation -

-
-
- - -

- 项目启动宣讲 -

-
-
- - -

- 输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题 -

-
-
- - -

- 某某团队 某某某 -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 01 -

-
-
- - - - - - - - - - - -

- 02 -

-
-
- - - - - - - - - - - -

03

-
-
- - - - - - - - - - - -

04

-
-
- - -

CONTENTS

-
-
- - -

- - 背景同步 - -

-
-
- - -

- Background Synchronization -

-
-
- - -

- - 项目方案 - -

-
-
- - -

Project Proposal

-
-
- - -

成本预估

-
-
- - -

Cost Estimate

-
-
- - -

产品线路图

-
-
- - -

Roadmap

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

背景同步

-
-
- - -

01

-
-
- - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- - 背景同步 - -

-
-
- - - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

上下文

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

背景三

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

背景二

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

背景一

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

背景同步

-
-
- - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- - 背景同步 - -

-
-
- - - - - - - - - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- -

-
-
- - -

- -

-
-
- - -

- -

-
-
- - -

- -

-
-
- - - - - - - - - - - - - - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

用户诉求

-
-
- - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- - 背景同步 - -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

项目价值

-
-
- - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- - 背景同步 - -

-
-
- - - - - - -

- - 项目价值一 - -

-
-
- - - - - - -

- - 项目价值二 - -

-
-
- - - - - - -

- - 项目价值三 - -

-
-
- - - - - - -

- - 项目价值四 - -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

指标 B 增长

-
-
- - -

指标 A 增长

-
-
- - -

项目目标

-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
  • -

    输入相关的描述信息描述上述主题

    -
  • -
-
-
- - -

820

-
-
- - -

1290

-
-
- - - - - - - - - - - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- - 背景同步 - -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

项目方案

-
-
- - -

02

-
-
- - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - - - - - - -

- 背景同步 -

-
-
- - -

- - 项目方案 - -

-
-
- - - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

关键决策四

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

关键决策三

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

关键决策二

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -

关键决策一

-
-
- - -

输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

-
-
- - -
    -
  • -

    输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

    -
  • -
  • -

    输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

    -
  • -
  • -

    输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

    -
  • -
-
-
- - -

关键决策

-
-
- - - - - - - - - - - - - - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - - - - - - -

- 背景同步 -

-
-
- - -

- - 项目方案 - -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

产品设计方案

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

产品设计方案

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

产品设计方案

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

产品设计方案

-
-
- - -

- 产品线路图 -

-
-
- - -

- 成本预估 -

-
-
- - - - - - - -

- 背景同步 -

-
-
- - -

- - 项目方案 - -

-
-
- - - - - - - - - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

成本预估

-
-
- - -

03

-
-
- - - - - -

- 产品线路图 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- 成本预估 -

-
-
- - -

- 背景同步 -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - -

- - 产品 - -

-
-
- - - - - - -

26 人天

-
-
- - -

- 产品线路图 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- 成本预估 -

-
-
- - -

- 背景同步 -

-
-
- - -

成本预估

-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

    -
  • -
  • -

    -

  • -
  • -

    -

  • -
-
-
- - - - - - -

- - 设计 - -

-
-
- - - - - - -

18 人天

-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

    -
  • -
  • -

    -

  • -
  • -

    -

  • -
-
-
- - - - - - -

- - 研发 - -

-
-
- - - - - - -

120 人天

-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

    -
  • -
  • -

    -

  • -
  • -

    -

  • -
-
-
- - - - - - -

- - 测试 - -

-
-
- - - - - - -

16 人天

-
-
- - -
    -
  • -

    输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题

    -
  • -
  • -

    -

  • -
  • -

    -

  • -
-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

- 产品线路图 -

-
-
- - -

- 项目方案 -

-
-
- - - - - - - -

- 成本预估 -

-
-
- - -

- 背景同步 -

-
-
- - -

优先级

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -

- 产品能力 -

-
-
- - - - - - - -

- 项目拆解 -

-
-
- - - - - - - -

负责人

-
-
- - - - - - - -

- 时间节点 -

-
-
- - - - - - - -

- 优先级 -

-
-
- - - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 1 月 -

-
-
- - - - - - -

- P0 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 3 月 -

-
-
- - - - - - -

- P0 -

-
-
- - - - - - - -

- 输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 3 月 -

-
-
- - - - - - -

- P0 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 4 月 -

-
-
- - - - - - -

- P1 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 4 月 -

-
-
- - - - - - -

- P2 -

-
-
- - - - - - - -

- 输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 5 月 -

-
-
- - - - - - -

- P0 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 5 月 -

-
-
- - - - - - -

- P0 -

-
-
- - - - - - -

- 输入相关的描述信息描述上述主题 -

-
-
- - - - - - -

- 输入“@+人名” -

-
-
- - - - - - -

- 25 年 6 月 -

-
-
- - - - - - -

- p2 -

-
-
- - -

- - - - -

- - - - -

- - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

产品路线图

-
-
- - -

04

-
-
- - - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

- 1-2 月 -

-
-
- - -

- 2-3 月 -

-
-
- - -

- 3-4 月 -

-
-
- - -

- 5-6 月 -

-
-
- - - - - - - - - - - -

- 主线任务描述 -

-
-
- - -

主线任务描述

-
-
- - -

主线任务描述

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - - - - - -

- 子任务 -

-
-
- - -

- 成本预估 -

-
-
- - - - - - - -

- 背景同步 -

-
-
- - -

- - 产品线路图 - -

-
-
- - -

- 项目方案 -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

🧑‍💻 测试

-
-
- - -
    -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
-
-
- - -

🧑‍💻 研发

-
-
- - -
    -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
-
-
- - -

🧑‍🎨 设计师

-
-
- - -
    -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
-
-
- - -

🧑‍💼 产品经理

-
-
- - -
    -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
  • -

    输入“@+人名”

    -
  • -
-
-
- - -

- 整体 Owner: - - 输入“@+人名” - -

-
-
- - -

项目成员

-
-
- - -

- 成本预估 -

-
-
- - - - - - - -

- 背景同步 -

-
-
- - -

- - 产品线路图 - -

-
-
- - -

- 项目方案 -

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - -

- 成本预估 -

-
-
- - - - - - - -

- 背景同步 -

-
-
- - -

- - 产品线路图 - -

-
-
- - -

- 项目方案 -

-
-
- - -

历史经验

-
-
- - - - - - - - - - - - - - -

历史文档

-
-
- - - - - - -

- - 风险点 - -

-
-
- - -
    -
  • -

    - - 风险点1 - -

    -
  • -
  • -

    - 输入相关的描述信息描述上述主题 -

    -
  • -
  • -

    - 输入相关的描述信息描述上述主题 -

    -
  • -
-
-
- - -
    -
  • -

    - - 风险点2 - -

    -
  • -
  • -

    - 输入相关的描述信息描述上述主题 -

    -
  • -
  • -

    - 输入相关的描述信息描述上述主题 -

    -
  • -
-
-
- - -
    -
  • -

    - - 风险点3 - -

    -
  • -
  • -

    - 输入相关的描述信息描述上述主题 -

    -
  • -
  • -

    - 输入相关的描述信息描述上述主题 -

    -
  • -
-
-
- - -

- - - - -

- - - - -

- - - - -

- - - - -

- - - - -

- - - - -

- - - - -

- - LOGO - -

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - -

产品线路图

-
-
- - -

成本预估

-
-
- - -

项目方案

-
-
- - -

背景同步

-
-
- - -

输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题

-
-
- - -

感谢观看

-
-
- - -

Thanks

-
-
- - -

- - LOGO - -

-
-
- - - -
- - - -
- \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--quarterly_review.xml b/skills/lark-slides/assets/templates/office--quarterly_review.xml deleted file mode 100644 index a55f30ae0..000000000 --- a/skills/lark-slides/assets/templates/office--quarterly_review.xml +++ /dev/null @@ -1,1253 +0,0 @@ - - 季度复盘 - - - - - - - <headline fontColor="rgba(67, 86, 113, 1)" fontSize="64"/> - <sub-headline fontColor="rgba(67, 86, 113, 1)" fontSize="24"/> - <body fontColor="rgba(67, 86, 113, 1)" fontSize="14"/> - <caption fontColor="rgba(67, 86, 113, 1)"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="268" height="41" topLeftX="40" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">你的团队</span> - </p> - </content> - </shape> - <shape width="2" height="20" topLeftX="37" topLeftY="34" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(67, 86, 113, 1)"/> - </fill> - </shape> - <shape width="646" height="116" topLeftX="48" topLeftY="149" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(67, 86, 113, 1)" bold="true"> - <p>季度复盘总结</p> - </content> - </shape> - <shape width="642" height="41" topLeftX="52" topLeftY="244" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p>Departmental Work Summary</p> - </content> - </shape> - <shape width="140" height="36" topLeftX="58" topLeftY="295" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(67, 86, 113, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2026 Q1</span> - </strong> - </p> - </content> - </shape> - <line startX="926" startY="8" endX="926" endY="378" alpha="0.2"> - <border color="rgba(67, 86, 113, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="90" height="38" topLeftX="491" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p>季度概述</p> - </content> - </shape> - <shape width="90" height="38" topLeftX="701" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p>工作成果</p> - </content> - </shape> - <shape width="90" height="38" topLeftX="596" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p>目标复盘</p> - </content> - </shape> - <shape width="90" height="38" topLeftX="807" topLeftY="24" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p>未来规划</p> - </content> - </shape> - <img src="GH2XbzpA4okl6rxlGUIcHq9pnyb" width="551" height="347" topLeftX="438" topLeftY="193" exposure="1" contrast="41" saturation="-59" temperature="-18"> - <crop type="rect" leftOffset="72" rightOffset="63" topOffset="0" bottomOffset="197" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NrnIbEr91oOuxFx653xc9P7tn6e" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="443" height="92" topLeftX="37" topLeftY="160" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="48">目录 CONTENTS</span> - </strong> - </p> - </content> - </shape> - <shape width="223" height="41" topLeftX="40" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.6)" fontSize="14">你的团队</span> - </p> - </content> - </shape> - <shape width="2" height="20" topLeftX="37" topLeftY="34" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - </shape> - <shape width="345" height="44" topLeftX="40" topLeftY="440" presetHandlers="26" alpha="0.29" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="257" height="41" topLeftX="58" topLeftY="442" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">未来规划 Future Planning</span> - </p> - </content> - </shape> - <shape width="345" height="44" topLeftX="40" topLeftY="266" presetHandlers="26" alpha="0.29" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.4)"/> - </shape> - <shape width="282" height="41" topLeftX="58" topLeftY="268" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">季度概述 Quarterly Overview</span> - </p> - </content> - </shape> - <shape width="345" height="44" topLeftX="40" topLeftY="324" presetHandlers="26" alpha="0.29" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.4)"/> - </shape> - <shape width="295" height="41" topLeftX="58" topLeftY="326" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">目标复盘 OKR Review</span> - </p> - </content> - </shape> - <shape width="345" height="44" topLeftX="40" topLeftY="382" presetHandlers="26" alpha="0.29" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.6)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="257" height="41" topLeftX="58" topLeftY="384" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">工作成果 Work Results</span> - </p> - </content> - </shape> - <img src="KUrhbGGF8o5qaixDNQ4claw3nKb" width="404" height="540" topLeftX="556" topLeftY="0" saturation="-70"> - <crop type="rect" leftOffset="136" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FIQ7bmN4HomZJ4xw5Jdc2VQXnuf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="712" height="146" topLeftX="124" topLeftY="156" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false"> - <p> - <span color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="28" bold="false">请用一句话简要概括一下这个季度的状况。根据需要编辑和完善文本,以确保有效传达您的信息,并吸引受众的注意力</span> - </p> - </content> - </shape> - <shape width="4" height="120" topLeftX="109" topLeftY="169" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <undefined type="fallback"/> - <shape width="395" height="41" topLeftX="283" topLeftY="74" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">Quarterly Overview</span> - </p> - </content> - </shape> - <shape width="395" height="56" topLeftX="283" topLeftY="38" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(67, 86, 113, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="24">季度概述</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="IOKkbQRAroyuDPxVzXucSJ9Lnfb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="395" height="77" topLeftX="59" topLeftY="49" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true" textAlign="left"> - <p>数据状况</p> - </content> - </shape> - <shape width="126" height="68" topLeftX="64" topLeftY="258" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(67, 86, 113, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(67, 86, 113, 1)">68%</span> - </p> - </content> - </shape> - <shape width="144" height="44" topLeftX="64" topLeftY="313" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(16, 50, 98, 0.4)" textAlign="left"> - <p> - <span color="rgba(16, 50, 98, 0.4)">用户留存率</span> - </p> - </content> - </shape> - <shape width="126" height="68" topLeftX="64" topLeftY="377" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(67, 86, 113, 1)" bold="true" textAlign="left"> - <p>56%</p> - </content> - </shape> - <shape width="144" height="44" topLeftX="64" topLeftY="429" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(16, 50, 98, 0.4)" textAlign="left"> - <p> - <span color="rgba(16, 50, 98, 0.4)">预计市场占有率</span> - </p> - </content> - </shape> - <shape width="12" height="12" topLeftX="792" topLeftY="87" type="ellipse"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - </shape> - <shape width="120" height="38" topLeftX="804" topLeftY="74" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(37, 43, 51, 1)" textAlign="left"> - <p>你的产品</p> - </content> - </shape> - <shape width="12" height="12" topLeftX="792" topLeftY="134" type="ellipse"> - <fill> - <fillColor color="rgba(16, 50, 98, 0.4)"/> - </fill> - </shape> - <shape width="120" height="38" topLeftX="805" topLeftY="121" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(37, 43, 51, 1)" textAlign="left"> - <p> - <span color="rgba(37, 43, 51, 1)" fontSize="12">竞品 A</span> - </p> - </content> - </shape> - <shape width="363" height="62" topLeftX="59" topLeftY="116" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(16, 50, 98, 0.4)"> - <p> - <span color="rgba(16, 50, 98, 0.4)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <line startX="348" startY="243" endX="906" endY="242" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="348" startY="314" endX="906" endY="313" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="348" startY="387" endX="906" endY="386" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="348" startY="458" endX="906" endY="457" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="51" height="44" topLeftX="280" topLeftY="437" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(16, 50, 98, 0.4)" textAlign="center"> - <p> - <span color="rgba(16, 50, 98, 0.4)">0</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="280" topLeftY="366" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(16, 50, 98, 0.4)" textAlign="center"> - <p> - <span color="rgba(16, 50, 98, 0.4)">20</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="280" topLeftY="293" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(16, 50, 98, 0.4)" textAlign="center"> - <p> - <span color="rgba(16, 50, 98, 0.4)">40</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="280" topLeftY="222" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(16, 50, 98, 0.4)" textAlign="center"> - <p> - <span color="rgba(16, 50, 98, 0.4)">60</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="421" topLeftY="457" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)">Q1</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="550" topLeftY="457" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)">Q2</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="680" topLeftY="457" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)">Q3</span> - </p> - </content> - </shape> - <shape width="51" height="44" topLeftX="810" topLeftY="457" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)">Q4</span> - </p> - </content> - </shape> - <shape width="16" height="97" topLeftX="428" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(16, 50, 98, 0.4)"/> - </fill> - </shape> - <shape width="16" height="51" topLeftX="449" topLeftY="407" type="rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - </shape> - <shape width="16" height="116" topLeftX="558" topLeftY="341" type="rect"> - <fill> - <fillColor color="rgba(16, 50, 98, 0.4)"/> - </fill> - </shape> - <shape width="16" height="116" topLeftX="578" topLeftY="341" type="rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - </shape> - <shape width="16" height="116" topLeftX="688" topLeftY="341" type="rect"> - <fill> - <fillColor color="rgba(16, 50, 98, 0.4)"/> - </fill> - </shape> - <shape width="16" height="164" topLeftX="708" topLeftY="293" type="rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - </shape> - <shape width="16" height="120" topLeftX="817" topLeftY="337" type="rect"> - <fill> - <fillColor color="rgba(16, 50, 98, 0.4)"/> - </fill> - </shape> - <shape width="16" height="179" topLeftX="837" topLeftY="278" type="rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="220" height="260" topLeftX="608" topLeftY="160" presetHandlers="0" alpha="0.5" type="round-rect"> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="220" height="260" topLeftX="370" topLeftY="160" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(39, 49, 62, 1)"/> - </fill> - </shape> - <shape width="220" height="260" topLeftX="132" topLeftY="160" presetHandlers="0" alpha="0.5" type="round-rect"> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="200" height="41" topLeftX="142" topLeftY="287" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="false" textAlign="center"> - <p> - <span bold="false">关键数据 #1</span> - </p> - </content> - </shape> - <shape width="200" height="74" topLeftX="142" topLeftY="330" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 0.502)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="200" height="41" topLeftX="380" topLeftY="287" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="false" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" bold="false">关键数据 #2</span> - </p> - </content> - </shape> - <shape width="200" height="74" topLeftX="380" topLeftY="330" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="200" height="74" topLeftX="618" topLeftY="330" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 0.502)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="200" height="41" topLeftX="618" topLeftY="287" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="false" textAlign="center"> - <p> - <span bold="false">关键数据 #3</span> - </p> - </content> - </shape> - <shape width="200" height="70" topLeftX="142" topLeftY="196" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="42">2,048</span> - </strong> - </p> - </content> - </shape> - <shape width="200" height="70" topLeftX="380" topLeftY="196" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="42">6,068</span> - </strong> - </p> - </content> - </shape> - <shape width="200" height="70" topLeftX="618" topLeftY="196" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="42">24%</span> - </strong> - </p> - </content> - </shape> - <shape width="396" height="56" topLeftX="282" topLeftY="38" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(67, 86, 113, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="24">数据状况</span> - </strong> - </p> - </content> - </shape> - <shape width="396" height="41" topLeftX="282" topLeftY="74" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">Data status</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeT7bMsMSoDAobx3VOgcluxNnac" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="466" height="77" topLeftX="247" topLeftY="212" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(67, 86, 113, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">目标复盘 OKR Review</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="IOKkbQRAroyuDPxVzXucSJ9Lnfb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="152" height="56" topLeftX="40" topLeftY="40" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="left"> - <p> - <strong> - <span fontSize="24">Q1 目标复盘</span> - </strong> - </p> - </content> - </shape> - <shape width="56" height="40" topLeftX="40" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(67, 86, 113, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="20">O4</span> - </strong> - </p> - </content> - </shape> - <shape width="708" height="52" topLeftX="94" topLeftY="343" presetHandlers="26" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.1)"/> - </shape> - <shape width="603" height="41" topLeftX="108" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="94" height="36" topLeftX="817" topLeftY="351" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">M</span> - </strong> - </p> - </content> - </shape> - <shape width="56" height="40" topLeftX="40" topLeftY="287" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(67, 86, 113, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="20">O3</span> - </strong> - </p> - </content> - </shape> - <shape width="708" height="52" topLeftX="94" topLeftY="281" presetHandlers="26" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.1)"/> - </shape> - <shape width="603" height="41" topLeftX="108" topLeftY="286" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="94" height="36" topLeftX="817" topLeftY="289" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">M-</span> - </strong> - </p> - </content> - </shape> - <shape width="56" height="40" topLeftX="40" topLeftY="224" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(67, 86, 113, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="20">O2</span> - </strong> - </p> - </content> - </shape> - <shape width="708" height="52" topLeftX="94" topLeftY="218" presetHandlers="26" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.1)"/> - </shape> - <shape width="603" height="41" topLeftX="108" topLeftY="224" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="94" height="36" topLeftX="817" topLeftY="226" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">M</span> - </strong> - </p> - </content> - </shape> - <shape width="56" height="40" topLeftX="40" topLeftY="162" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(67, 86, 113, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="20">O1</span> - </strong> - </p> - </content> - </shape> - <shape width="708" height="52" topLeftX="94" topLeftY="156" presetHandlers="26" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.1)"/> - </shape> - <shape width="603" height="41" topLeftX="108" topLeftY="162" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="94" height="36" topLeftX="817" topLeftY="164" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">M+</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="IOKkbQRAroyuDPxVzXucSJ9Lnfb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="395" height="68" topLeftX="48" topLeftY="83" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" textAlign="left"> - <p>如何完成目标 HOW</p> - </content> - </shape> - <shape width="225" height="44" topLeftX="-217" topLeftY="39" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p/> - </content> - </shape> - <undefined type="fallback"/> - <shape width="305" height="62" topLeftX="48" topLeftY="139" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(16, 50, 98, 0.4)"> - <p> - <span color="rgba(16, 50, 98, 0.4)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeT7bMsMSoDAobx3VOgcluxNnac" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="466" height="77" topLeftX="247" topLeftY="212" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(67, 86, 113, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">工作成果 Work Results</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="395" height="44" topLeftX="31" topLeftY="30" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="16">工作结果 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="492" height="36" topLeftX="31" topLeftY="68" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" bold="false"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(67, 86, 113, 1)" fontSize="12" bold="false">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <img src="Fx44bLHhEo2M5fxnkxbciHg1n0d" width="355" height="459" topLeftX="572" topLeftY="38" saturation="61" temperature="-47"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="83" bottomOffset="83" presetHandlers="0"/> - </img> - <shape width="261" height="92" topLeftX="135" topLeftY="384" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="left"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="34" topLeftX="135" topLeftY="355" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">关键</span> - </strong> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">点 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="92" topLeftX="135" topLeftY="225" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="left"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="34" topLeftX="135" topLeftY="196" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">关键</span> - </strong> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="76" height="76" topLeftX="45" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">01</span> - </strong> - </p> - </content> - </shape> - <shape width="76" height="76" topLeftX="45" topLeftY="354" type="ellipse"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">01</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="395" height="44" topLeftX="31" topLeftY="30" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="16">工作结果 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="492" height="36" topLeftX="31" topLeftY="68" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="false"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(67, 86, 113, 1)" fontSize="12" bold="false">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <img src="KOeRbHNF0ooGkGxNePNcqeblnf7" width="428" height="241" topLeftX="493" topLeftY="124" exposure="3" saturation="-28" temperature="-100"> - <crop type="rect" leftOffset="49" rightOffset="37" topOffset="0" bottomOffset="48" presetHandlers="0"/> - </img> - <img src="KEglbi17LosUiRxiWINcwLM8nCd" width="428" height="241" topLeftX="39" topLeftY="124" exposure="32" saturation="-76" temperature="-100"> - <crop type="rect" leftOffset="0.79" rightOffset="0.79" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="428" height="74" topLeftX="39" topLeftY="413" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="34" topLeftX="152" topLeftY="376" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true" textAlign="center"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">关键</span> - </strong> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="428" height="74" topLeftX="493" topLeftY="413" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="34" topLeftX="606" topLeftY="376" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true" textAlign="center"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">关键</span> - </strong> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">点 #1</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="395" height="44" topLeftX="31" topLeftY="30" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="16">工作结果 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="267" height="56" topLeftX="39" topLeftY="408" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="39" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p>关键结果 #1</p> - </content> - </shape> - <shape width="267" height="56" topLeftX="336" topLeftY="408" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="336" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p>关键结果 #2</p> - </content> - </shape> - <shape width="267" height="56" topLeftX="634" topLeftY="408" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="41" topLeftX="634" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p>关键结果 #3</p> - </content> - </shape> - <img src="OSQCbZBZGoVP1Qx1WXKcrM8JnCc" width="882" height="241" topLeftX="39" topLeftY="94" exposure="32" saturation="-76" temperature="-100"> - <crop type="rect" leftOffset="7" rightOffset="0" topOffset="37" bottomOffset="221" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="395" height="44" topLeftX="31" topLeftY="30" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <p> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="16">结果复盘</span> - </strong> - </p> - </content> - </shape> - <shape width="148" height="36" topLeftX="46" topLeftY="113" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">做的好的</span> - </strong> - </p> - </content> - </shape> - <shape width="148" height="36" topLeftX="448" topLeftY="113" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(37, 43, 51, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">可以更好的</span> - </strong> - </p> - </content> - </shape> - <shape width="376" height="342" topLeftX="46" topLeftY="164" presetHandlers="12" type="round-rect"> - <border color="linear-gradient(180deg,rgba(48, 70, 99, 0.34) 0%,rgba(37, 43, 51, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" lineSpacing="multiple:1.8" textAlign="left"> - <ul> - <li> - <p lineSpacing="multiple:1.8"> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </li> - <li> - <p lineSpacing="multiple:1.8"> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </li> - <li> - <p lineSpacing="multiple:1.8"> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="376" height="342" topLeftX="448" topLeftY="164" presetHandlers="12" type="round-rect"> - <border color="linear-gradient(180deg,rgba(48, 70, 99, 0.34) 0%,rgba(37, 43, 51, 0) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(67, 86, 113, 1)" lineSpacing="multiple:1.8" textAlign="left"> - <ul> - <li> - <p lineSpacing="multiple:1.8"> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </li> - <li> - <p lineSpacing="multiple:1.8"> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </li> - <li> - <p lineSpacing="multiple:1.8"> - <span color="rgba(67, 86, 113, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </li> - </ul> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeT7bMsMSoDAobx3VOgcluxNnac" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="466" height="77" topLeftX="247" topLeftY="212" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(67, 86, 113, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">未来规划 Future Planning</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CcdZb7zBbovgU3xDjvxcpvRtnng" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="708" height="116" topLeftX="167" topLeftY="193" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <ul> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR1</span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12"> - 描述相关的信息以解释你的标题。</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR2 </span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12" bold="false">- 描述相关的信息以解释你的标题。</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR3</span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12" bold="false"> - 描述相关的信息以解释你的标题。</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR4 </span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12" bold="false">- 描述相关的信息以解释你的标题。</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="708" height="116" topLeftX="167" topLeftY="386" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)"> - <ul> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR1</span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12"> - 描述相关的信息以解释你的标题。</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR2 </span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12" bold="false">- 描述相关的信息以解释你的标题。</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR3</span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12" bold="false"> - 描述相关的信息以解释你的标题。</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12">KR4 </span> - </strong> - <span color="rgba(37, 43, 51, 1)" fontSize="12" bold="false">- 描述相关的信息以解释你的标题。</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="56" height="40" topLeftX="103" topLeftY="139" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="20">O1</span> - </strong> - </p> - </content> - </shape> - <shape width="708" height="52" topLeftX="157" topLeftY="133" presetHandlers="26" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.1)"/> - </shape> - <shape width="603" height="41" topLeftX="172" topLeftY="138" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </strong> - </p> - </content> - </shape> - <shape width="56" height="40" topLeftX="106" topLeftY="331" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="20">O2</span> - </strong> - </p> - </content> - </shape> - <shape width="708" height="52" topLeftX="160" topLeftY="325" presetHandlers="26" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" angle="90" blur="18" color="rgba(16, 50, 98, 0.1)"/> - </shape> - <shape width="603" height="41" topLeftX="175" topLeftY="331" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" bold="true"> - <p> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="14">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </strong> - </p> - </content> - </shape> - <shape width="395" height="41" topLeftX="283" topLeftY="74" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(67, 86, 113, 1)" textAlign="center"> - <p> - <span color="rgba(67, 86, 113, 1)" fontSize="14">Future Planning</span> - </p> - </content> - </shape> - <shape width="395" height="56" topLeftX="283" topLeftY="38" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(67, 86, 113, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(67, 86, 113, 1)" fontSize="24">未来规划</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FIQ7bmN4HomZJ4xw5Jdc2VQXnuf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="566" height="77" topLeftX="197" topLeftY="212" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">Thank you</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--work_report.xml b/skills/lark-slides/assets/templates/office--work_report.xml deleted file mode 100644 index 5cc37de11..000000000 --- a/skills/lark-slides/assets/templates/office--work_report.xml +++ /dev/null @@ -1,1099 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>工作汇报 - - - - - - - <headline fontColor="#000000FF" fontSize="32"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="V1yybjKJoovlTixLUGUcyyU0nwf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="350" height="47" topLeftX="349" topLeftY="286" alpha="0.48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" textAlign="left"> - <p> - <span fontSize="18" bold="false">汇报人: XXXX</span> - </p> - </content> - </shape> - <shape width="350" height="47" topLeftX="349" topLeftY="179" alpha="0.48" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="false" textAlign="left"> - <p> - <span fontSize="18" bold="false">WORK SUMMARY</span> - </p> - </content> - </shape> - <shape width="350" height="88" topLeftX="349" topLeftY="206" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(53, 49, 58, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="left"> - <p> - <strong> - <span color="rgba(53, 49, 58, 1)" fontSize="48">工作汇报</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="327" height="62" topLeftX="45" topLeftY="106" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="488" height="64" topLeftX="42" topLeftY="54" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <strong> - <span fontSize="32">汇报流程</span> - </strong> - </p> - </content> - </shape> - <shape width="206" height="83" topLeftX="730" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="206" height="44" topLeftX="730" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>下一步规划</p> - </content> - </shape> - <shape width="206" height="83" topLeftX="503" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="206" height="44" topLeftX="503" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>经验与成长</p> - </content> - </shape> - <shape width="206" height="83" topLeftX="276" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="206" height="44" topLeftX="276" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>进展更新</p> - </content> - </shape> - <shape width="206" height="83" topLeftX="46" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="206" height="44" topLeftX="46" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>目标复盘</p> - </content> - </shape> - <shape width="105" height="105" topLeftX="513" topLeftY="218" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="105" height="105" topLeftX="286" topLeftY="218" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="105" height="105" topLeftX="56" topLeftY="218" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="105" height="105" topLeftX="740" topLeftY="218" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <img src="X7Kvbtl9CobayrxUfNacKQ0nnqT" width="105" height="105" topLeftX="740" topLeftY="218"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="14"/> - </img> - <img src="SfKkb2wb9o4k3rxRi1IcQkUxnDh" width="105" height="105" topLeftX="56" topLeftY="218"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="14"/> - </img> - <img src="B2robKlpXoGzNTxNDvxcT67LnKf" width="105" height="105" topLeftX="286" topLeftY="218"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="14"/> - </img> - <img src="CjRfb9zhTokbWlxArWzcTUQbnOb" width="105" height="105" topLeftX="513" topLeftY="218"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="14"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="327" height="62" topLeftX="45" topLeftY="106" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="488" height="64" topLeftX="42" topLeftY="54" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <strong> - <span fontSize="32">目标复盘</span> - </strong> - </p> - </content> - </shape> - <shape width="366" height="44" topLeftX="534" topLeftY="63" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>提升用户满意度</p> - </content> - </shape> - <shape width="366" height="62" topLeftX="534" topLeftY="98" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(147, 150, 156, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="366" height="62" topLeftX="534" topLeftY="213" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(147, 150, 156, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="366" height="44" topLeftX="534" topLeftY="178" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>提升用户留存</p> - </content> - </shape> - <shape width="366" height="62" topLeftX="534" topLeftY="328" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(147, 150, 156, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="366" height="44" topLeftX="534" topLeftY="293" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>扩展用户基数</p> - </content> - </shape> - <shape width="366" height="62" topLeftX="534" topLeftY="443" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(147, 150, 156, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="366" height="44" topLeftX="534" topLeftY="407" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>增加产品利润率</p> - </content> - </shape> - <shape width="90" height="52" topLeftX="450" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(127, 59, 245, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p>70%</p> - </content> - </shape> - <shape width="90" height="52" topLeftX="450" topLeftY="291" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(245, 74, 69, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p>100%</p> - </content> - </shape> - <shape width="90" height="52" topLeftX="450" topLeftY="178" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(51, 112, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p>60%</p> - </content> - </shape> - <shape width="90" height="52" topLeftX="450" topLeftY="63" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 136, 0, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p>90%</p> - </content> - </shape> - <line startX="478" startY="159" endX="900" endY="159"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="478" startY="274" endX="900" endY="274"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="478" startY="389" endX="900" endY="388"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="327" height="62" topLeftX="45" topLeftY="106" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="488" height="64" topLeftX="42" topLeftY="54" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" textAlign="left"> - <p> - <strong> - <span fontSize="32">进展更新</span> - </strong> - </p> - </content> - </shape> - <shape width="56" height="56" topLeftX="509" topLeftY="80" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 0.51)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24"> - <p> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="24">1</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="56" height="56" topLeftX="726" topLeftY="80" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 0.51)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 136, 0, 1)"> - <p> - <strong> - <span color="rgba(255, 136, 0, 1)" fontSize="24">2</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="56" height="56" topLeftX="509" topLeftY="294" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 0.51)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(245, 74, 69, 1)"> - <p> - <strong> - <span color="rgba(245, 74, 69, 1)" fontSize="24">3</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="56" height="56" topLeftX="726" topLeftY="294" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 0.51)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(127, 59, 245, 1)"> - <p> - <strong> - <span color="rgba(127, 59, 245, 1)" fontSize="24">4</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="83" topLeftX="502" topLeftY="395" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="83" topLeftX="719" topLeftY="395" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="83" topLeftX="719" topLeftY="182" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="83" topLeftX="502" topLeftY="182" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="502" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #3</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="719" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #4</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="719" topLeftY="148" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #2</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="502" topLeftY="148" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #1</p> - </content> - </shape> - <shape width="390" height="198" topLeftX="44" topLeftY="288" presetHandlers="12" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <img src="AhcMbGEh4ozikoxpZS5cSJDlnxh" width="378" height="187" topLeftX="50" topLeftY="294" alpha="0.8" exposure="16" saturation="-15"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="13" bottomOffset="13" presetHandlers="10"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Hs6Vb0DcDooIyPx4DRLcUn9QnHc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="217" height="449" topLeftX="358" topLeftY="45" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <img src="QGM6bOHEGoSpXexp8kPcmQDmnpc" width="202" height="437" topLeftX="365" topLeftY="52"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="279" height="116" topLeftX="42" topLeftY="45" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p lineSpacing="multiple:1.2" letterSpacing="8"> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="80">0</span> - </strong> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="80">1</span> - </strong> - </p> - </content> - </shape> - <shape width="299" height="63" topLeftX="42" topLeftY="345" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="36">关键结果</span> - </strong> - </p> - </content> - </shape> - <shape width="279" height="62" topLeftX="42" topLeftY="406" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="319" height="167" topLeftX="611" topLeftY="301" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">这是一个模板模块,你可以介绍我们的产品功能</span> - </p> - <p/> - <p> - <span fontSize="14">把我们的产品抽象的界面展示功能放在右边</span> - </p> - <p/> - <p> - <span fontSize="14">右边的产品界面图片也是分层的。你可以删除这个界面,保留底部的装饰图片,然后用你想用的产品界面代替它。</span> - </p> - </content> - </shape> - <shape width="299" height="44" topLeftX="611" topLeftY="171" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="16">用户满意度</span> - </p> - </content> - </shape> - <shape width="299" height="84" topLeftX="611" topLeftY="204" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(51, 112, 255, 1)" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="64">60</span> - </strong> - <strong> - <span color="rgba(51, 112, 255, 1)" fontSize="36">%</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DtsKblm5koUbwKxUNrgcvihHnhh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="202" height="116" topLeftX="728" topLeftY="388" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 136, 0, 1)" textAlign="right"> - <p lineSpacing="multiple:1.2" letterSpacing="8"> - <strong> - <span color="rgba(255, 136, 0, 1)" fontSize="80">0</span> - </strong> - <strong> - <span color="rgba(255, 136, 0, 1)" fontSize="80">2</span> - </strong> - </p> - </content> - </shape> - <shape width="299" height="63" topLeftX="44" topLeftY="53" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="36">关键结果</span> - </strong> - </p> - </content> - </shape> - <shape width="358" height="62" topLeftX="361" topLeftY="53" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="267" height="62" topLeftX="44" topLeftY="279" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="44" topLeftY="244" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #1</p> - </content> - </shape> - <shape width="267" height="62" topLeftX="361" topLeftY="279" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="361" topLeftY="244" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #2</p> - </content> - </shape> - <shape width="267" height="62" topLeftX="44" topLeftY="408" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="44" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #3</p> - </content> - </shape> - <shape width="267" height="62" topLeftX="361" topLeftY="408" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="361" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>关键结果 #4</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HZmVby7pHoCsGyxYBricPrZonqh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="522" height="450" topLeftX="387" topLeftY="45" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="374" height="116" topLeftX="42" topLeftY="175" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(127, 59, 245, 1)" textAlign="left"> - <p lineSpacing="multiple:1.2" letterSpacing="8"> - <strong> - <span color="rgba(127, 59, 245, 1)" fontSize="80">0</span> - </strong> - <strong> - <span color="rgba(127, 59, 245, 1)" fontSize="80">3</span> - </strong> - </p> - </content> - </shape> - <line startX="434" startY="434" endX="889" endY="435" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="434" startY="134" endX="889" endY="135" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="434" startY="194" endX="889" endY="195" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="435" startY="251" endX="890" endY="252" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="434" startY="314" endX="889" endY="315" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="435" startY="375" endX="890" endY="376" alpha="0.15"> - <border color="rgba(31, 35, 41, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="299" height="64" topLeftX="42" topLeftY="302" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="36">关键结果</span> - </strong> - </p> - </content> - </shape> - <shape width="279" height="62" topLeftX="42" topLeftY="357" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="12" height="12" topLeftX="55" topLeftY="466" type="ellipse"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="120" height="38" topLeftX="67" topLeftY="453" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">所有用户</span> - </p> - </content> - </shape> - <shape width="12" height="12" topLeftX="159" topLeftY="466" alpha="0.25" type="ellipse"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="120" height="38" topLeftX="171" topLeftY="453" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">留存用户</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="435" topLeftY="433" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2020</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="381" topLeftY="115" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">100</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="381" topLeftY="171" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">80</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="381" topLeftY="232" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">60</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="382" topLeftY="295" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">40</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="381" topLeftY="356" alpha="0.3" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">20</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="514" topLeftY="433" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2021</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="593" topLeftY="433" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2022</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="673" topLeftY="433" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2023</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="752" topLeftY="433" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2024</span> - </p> - </content> - </shape> - <shape width="53" height="38" topLeftX="831" topLeftY="433" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">2025</span> - </p> - </content> - </shape> - <shape width="18" height="252" topLeftX="849" topLeftY="182" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="156" topLeftX="849" topLeftY="278" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="274" topLeftX="769" topLeftY="160" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="170" topLeftX="769" topLeftY="263" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="215" topLeftX="690" topLeftY="219" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="93" topLeftX="690" topLeftY="341" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="149" topLeftX="611" topLeftY="284" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="120" topLeftX="611" topLeftY="314" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="215" topLeftX="532" topLeftY="219" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="143" topLeftX="532" topLeftY="291" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="94" topLeftX="452" topLeftY="340" presetHandlers="19" alpha="0.15" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - <shape width="18" height="77" topLeftX="452" topLeftY="356" presetHandlers="19" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="858" height="314" topLeftX="50" topLeftY="53" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="299" height="63" topLeftX="50" topLeftY="410" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="36">关键结果</span> - </strong> - </p> - </content> - </shape> - <shape width="279" height="62" topLeftX="280" topLeftY="410" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <line startX="263" startY="413" endX="264" endY="470"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="173" height="116" topLeftX="758" topLeftY="388" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(245, 74, 69, 1)" textAlign="right"> - <p lineSpacing="multiple:1.2" letterSpacing="8"> - <strong> - <span color="rgba(245, 74, 69, 1)" fontSize="80">0</span> - </strong> - <strong> - <span color="rgba(245, 74, 69, 1)" fontSize="80">4</span> - </strong> - </p> - </content> - </shape> - <img src="E1mGbNkwBoqbpzxuGJVcF4hpnrd" width="842" height="301" topLeftX="58" topLeftY="60" alpha="0.85" exposure="35" saturation="-26" temperature="5"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="46" bottomOffset="46" presetHandlers="12"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="327" height="62" topLeftX="45" topLeftY="136" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="488" height="64" topLeftX="42" topLeftY="84" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" textAlign="left"> - <p>经验成长</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="197" height="83" topLeftX="45" topLeftY="146" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="229" height="64" topLeftX="42" topLeftY="94" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" textAlign="left"> - <p>方法论总结</p> - </content> - </shape> - <shape width="214" height="382" topLeftX="258" topLeftY="79" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="83" topLeftX="264" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="264" topLeftY="342" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>方法论 #1</p> - </content> - </shape> - <shape width="214" height="382" topLeftX="489" topLeftY="79" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="83" topLeftX="495" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="495" topLeftY="342" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>方法论 #2</p> - </content> - </shape> - <shape width="214" height="382" topLeftX="719" topLeftY="79" presetHandlers="14" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="202" height="83" topLeftX="725" topLeftY="374" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="false"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="202" height="44" topLeftX="725" topLeftY="342" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p>方法论 #3</p> - </content> - </shape> - <img src="OOmEb343jolp58xrDnacYN18ncb" width="200" height="252" topLeftX="727" topLeftY="86"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.18" bottomOffset="0.18" presetHandlers="12"/> - </img> - <img src="HGb6bju5molc3gxT9ecccuHYnxd" width="200" height="252" topLeftX="495" topLeftY="86"> - <crop type="rect" leftOffset="0.03" rightOffset="0.03" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <img src="UOtKbgGgboAqGrxx8cPcwbEMnFb" width="200" height="252" topLeftX="265" topLeftY="86"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.18" bottomOffset="0.18" presetHandlers="12"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="327" height="62" topLeftX="45" topLeftY="106" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="488" height="64" topLeftX="42" topLeftY="54" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" lineSpacing="multiple:1.35" textAlign="left"> - <p>下一步规划</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NTWGbjziqoG2vZxAoBrc9p3znbd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="81" startY="450" endX="80" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="214" startY="450" endX="213" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="347" startY="450" endX="346" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="480" startY="450" endX="480" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="614" startY="450" endX="613" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="880" startY="450" endX="879" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="747" startY="450" endX="746" endY="90" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="399" height="48" topLeftX="214" topLeftY="101" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">调查研究</span> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="229" height="56" topLeftX="208" topLeftY="153" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="337" height="48" topLeftX="480" topLeftY="161" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(127, 59, 245, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">研发执行</span> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(127, 59, 245, 0.2)"/> - </shape> - <shape width="400" height="48" topLeftX="80" topLeftY="280" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(245, 74, 69, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">制定策略</span> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(245, 74, 69, 0.15)"/> - </shape> - <shape width="133" height="48" topLeftX="480" topLeftY="221" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">设计执行</span> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="267" height="56" topLeftX="80" topLeftY="333" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="267" height="56" topLeftX="613" topLeftY="399" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="267" height="48" topLeftX="613" topLeftY="343" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">质量测试</span> - </p> - </content> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="TICCbnOL2ob8axxsXIychojDnhd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="350" height="87" topLeftX="305" topLeftY="206" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(53, 49, 58, 1)" bold="true" lineSpacing="multiple:1.4" textAlign="center"> - <p> - <strong> - <span color="rgba(53, 49, 58, 1)" fontSize="48">谢谢观赏</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--work_summary.xml b/skills/lark-slides/assets/templates/office--work_summary.xml deleted file mode 100644 index a700d1959..000000000 --- a/skills/lark-slides/assets/templates/office--work_summary.xml +++ /dev/null @@ -1,4420 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>工作总结 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(34, 38, 41, 1)"/> - </fill> - </style> - <data> - <shape width="211" height="270" topLeftX="749" topLeftY="270" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="470" height="470" topLeftX="520" topLeftY="0" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="410" height="410" topLeftX="550" topLeftY="30" type="pie"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <img src="JNIDbOa9roxVVfxojZkcAW3XnPd" width="346" height="346" topLeftX="582" topLeftY="62"> - <crop type="rect" leftOffset="136" rightOffset="136" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="37" height="37" topLeftX="466" topLeftY="58" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="QsFDbyJTOobre4x5WAZcrLF3npf" width="46" height="77" topLeftX="503" topLeftY="418" alpha="0.7"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="10" height="10" topLeftX="486" topLeftY="87" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <img src="Fb4FbjKWCo130dxrMgQcdpBxnTg" width="86" height="10" topLeftX="31" topLeftY="271"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="MoiqbBVA1oXix5xxcvhcQLk3nAb" width="46" height="16" topLeftX="31" topLeftY="524"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="37" height="37" topLeftX="836" topLeftY="470" type="ellipse"> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="10" height="10" topLeftX="831" topLeftY="479" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="407" height="42" topLeftX="31" topLeftY="448" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="false"> - <p>2026 Q1 </p> - <p>By 姓名</p> - </content> - </shape> - <shape width="407" height="63" topLeftX="31" topLeftY="305" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="408" height="48" topLeftX="31" topLeftY="224" type="text"> - <content textType="title" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>某某团队</p> - </content> - </shape> - <shape width="408" height="90" topLeftX="31" topLeftY="134" type="text"> - <content textType="title" fontSize="60" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>工作总结</p> - </content> - </shape> - <shape width="72" height="18" topLeftX="68" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <img src="SJrybASt7oIAmKxh6Xac4NYhnxh" width="24" height="24" topLeftX="31" topLeftY="37" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="298" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="47" height="46" topLeftX="516" topLeftY="101" type="round2diag-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontFamily="Arial">01</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="46" topLeftX="516" topLeftY="194" type="round2diag-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontFamily="Arial">02</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="46" topLeftX="516" topLeftY="290" type="round2diag-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontFamily="Arial">03</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="46" topLeftX="516" topLeftY="384" type="round2diag-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontFamily="Arial">04</span> - </strong> - </p> - </content> - </shape> - <shape width="404" height="404" topLeftX="95" topLeftY="80" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="353" height="353" topLeftX="121" topLeftY="105" type="pie"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <img src="F9pLbUiZiohvrSxwtyzcf6dfnQK" width="298" height="298" topLeftX="149" topLeftY="133"> - <crop type="rect" leftOffset="117" rightOffset="117" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="233" height="60" topLeftX="52" topLeftY="45" type="text"> - <content textType="headline" fontSize="40" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="40" fontFamily="思源黑体">目录</span> - </p> - </content> - </shape> - <shape width="233" height="30" topLeftX="52" topLeftY="102" type="text"> - <content textType="headline" fontSize="20" fontFamily="Arial" color="rgba(255, 224, 136, 1)" bold="true"> - <p> - <span color="rgba(255, 224, 136, 1)" fontSize="20" fontFamily="Arial">CONTENTS</span> - </p> - </content> - </shape> - <img src="GcEOb8DiHogACrxPz3KcQZomnGg" width="86" height="10" topLeftX="825" topLeftY="491"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="47" height="46" topLeftX="514" topLeftY="99" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontFamily="Arial">01</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="46" topLeftX="514" topLeftY="192" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontFamily="Arial">02</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="46" topLeftX="514" topLeftY="288" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontFamily="Arial">03</span> - </strong> - </p> - </content> - </shape> - <shape width="47" height="46" topLeftX="514" topLeftY="382" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontFamily="Arial">04</span> - </strong> - </p> - </content> - </shape> - <shape width="37" height="37" topLeftX="52" topLeftY="470" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="10" height="10" topLeftX="79" topLeftY="474" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="332" height="42" topLeftX="579" topLeftY="412" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p textAlign="left">输入相关的描述信息以解释标题,输入相关的描述信息以解释标题</p> - </content> - </shape> - <shape width="332" height="30" topLeftX="579" topLeftY="376" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">后续计划</p> - </content> - </shape> - <shape width="332" height="42" topLeftX="579" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p textAlign="left">输入相关的描述信息以解释标题,输入相关的描述信息以解释标题</p> - </content> - </shape> - <shape width="332" height="30" topLeftX="579" topLeftY="282" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">经验反思</p> - </content> - </shape> - <shape width="332" height="42" topLeftX="579" topLeftY="224" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p textAlign="left">输入相关的描述信息以解释标题,输入相关的描述信息以解释标题</p> - </content> - </shape> - <shape width="332" height="30" topLeftX="579" topLeftY="188" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">完成情况</p> - </content> - </shape> - <shape width="332" height="42" topLeftX="579" topLeftY="130" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p textAlign="left">输入相关的描述信息以解释标题,输入相关的描述信息以解释标题</p> - </content> - </shape> - <shape width="332" height="30" topLeftX="579" topLeftY="94" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">工作概况</p> - </content> - </shape> - <img src="F9pLbUiZiohvrSxwtyzcf6dfnQK" width="298" height="298" topLeftX="149" topLeftY="133"> - <crop type="rect" leftOffset="117" rightOffset="117" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(34, 38, 41, 1)"/> - </fill> - </style> - <data> - <img src="BbgxbapUsowgUxxvPq1cc2TJnYd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GYslbhG0AoRPLbxG4QPcbTpunTc" width="960" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="75" bottomOffset="116" presetHandlers="0"/> - </img> - <img src="FnAFboETEoDtHdxsLZIcto8nnYc" width="103" height="12" topLeftX="809" topLeftY="489"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="99" topLeftX="196" topLeftY="223" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="132" height="132" topLeftX="769" topLeftY="-17" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="769" topLeftY="74" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="100" height="99" topLeftX="191" topLeftY="218" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="72" height="18" topLeftX="68" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <img src="OvVIbXxqioTTT8xXAckcWzYBnYg" width="24" height="24" topLeftX="31" topLeftY="37" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="BiE0bg77Poe1ZTxonW1ckyVBnfg" width="12" height="32" topLeftX="31" topLeftY="479"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="30" topLeftX="191" topLeftY="275" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center">PART 1</p> - </content> - </shape> - <shape width="407" height="63" topLeftX="335" topLeftY="284" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="407" height="72" topLeftX="334" topLeftY="199" type="text"> - <content textType="title" fontSize="48" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>工作概况</p> - </content> - </shape> - <icon width="40" height="40" topLeftX="221" topLeftY="232" iconType="iconpark/Office/compression.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="15" height="15" topLeftX="531" topLeftY="205" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Project Background</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">项目背景</p> - </content> - </shape> - <img src="JbFjbAlFNootaExzwGzcaS1anQx" width="103" height="12" topLeftX="215" topLeftY="71"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Apqqb1aFfoxZUQxeoUXc5Wgnn8b" width="163" height="378" topLeftX="577" topLeftY="120"> - <crop type="round1rect" leftOffset="256" rightOffset="256" topOffset="0" bottomOffset="0" presetHandlers="21"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="VN8wbAk7EoYO0Nxe5NjclG1bn7g" width="163" height="378" topLeftX="390" topLeftY="120"> - <crop type="round1rect" leftOffset="256" rightOffset="256" topOffset="0" bottomOffset="0" presetHandlers="21"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="283" height="168" topLeftX="57" topLeftY="326" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="283" height="168" topLeftX="55" topLeftY="324" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="283" height="168" topLeftX="56" topLeftY="122" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="283" height="168" topLeftX="54" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="24" topLeftX="91" topLeftY="141" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="16">项目背景</span> - </p> - </content> - </shape> - <shape width="230" height="84" topLeftX="91" topLeftY="177" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题,输入相关的描述信息以解释标题,输入相关的描述信息以解释标题,输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <img src="LOi9b6WueojLw8xFM6Scuq1vnCb" width="163" height="378" topLeftX="765" topLeftY="120"> - <crop type="round1rect" leftOffset="256" rightOffset="256" topOffset="0" bottomOffset="0" presetHandlers="21"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <icon width="20" height="20" topLeftX="67" topLeftY="144" iconType="iconpark/Office/table.svg"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="230" height="24" topLeftX="91" topLeftY="348" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="16">项目目标</span> - </p> - </content> - </shape> - <icon width="20" height="20" topLeftX="67" topLeftY="351" iconType="iconpark/Base/bookmark-one.svg"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="Kgh0b2HQroD3CDx2WBecvrD1nYv" width="40" height="12" topLeftX="298" topLeftY="114"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Kgh0b2HQroD3CDx2WBecvrD1nYv" width="40" height="12" topLeftX="298" topLeftY="318"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="230" height="84" topLeftX="91" topLeftY="384" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题,输入相关的描述信息以解释标题,输入相关的描述信息以解释标题,输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(221, 239, 247, 1)"/> - </fill> - </style> - <data> - <img src="PZwgbRQYEohPXzxJeNkcTBqDnUb" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GOIIbzQj8ojJ0YxXVO4cvaGMn7b" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Team Members</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">团队成员</p> - </content> - </shape> - <shape width="128" height="144" topLeftX="73" topLeftY="129" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="73" topLeftY="128" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="NagwbhT1UoRHSAxoKNQcXsEMngg" width="63" height="63" topLeftX="106" topLeftY="145"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="80" topLeftY="217" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="80" topLeftY="241" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="242" topLeftY="129" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="242" topLeftY="128" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Lv7cbt82ZoJ6baxmadfczk7Enze" width="63" height="63" topLeftX="274" topLeftY="145"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="249" topLeftY="217" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="249" topLeftY="241" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="409" topLeftY="129" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="409" topLeftY="128" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="V2dYbtxU9oMorhxRmqncilzQnQe" width="63" height="63" topLeftX="442" topLeftY="145"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="416" topLeftY="217" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="416" topLeftY="241" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="585" topLeftY="129" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="585" topLeftY="128" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="BS1MbloA4oGLVExMBsXcJ9G2ngg" width="63" height="63" topLeftX="617" topLeftY="145"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="592" topLeftY="217" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="592" topLeftY="241" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="750" topLeftY="129" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="750" topLeftY="128" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Vpepbbwz4oxM7RxYNc6ckhHMnMb" width="63" height="63" topLeftX="782" topLeftY="145"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="756" topLeftY="217" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="756" topLeftY="241" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="73" topLeftY="311" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="73" topLeftY="309" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="F8Hrb0kCpoEb3DxYimocy5qxnUe" width="63" height="63" topLeftX="106" topLeftY="326"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="80" topLeftY="397" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="80" topLeftY="422" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="242" topLeftY="311" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="242" topLeftY="309" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Vo3obQJMOopPLTxtdK4cSYXVnrf" width="63" height="63" topLeftX="274" topLeftY="326"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="249" topLeftY="397" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="249" topLeftY="422" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="409" topLeftY="311" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="409" topLeftY="309" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="QQ67by8a0oaYk9xephYc6gAAnUb" width="63" height="63" topLeftX="442" topLeftY="326"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="416" topLeftY="397" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="416" topLeftY="422" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="585" topLeftY="311" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="585" topLeftY="309" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="XURgb0FxIow7VnxlJw0c2U5RnGd" width="63" height="63" topLeftX="617" topLeftY="326"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="592" topLeftY="397" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="592" topLeftY="422" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <shape width="128" height="144" topLeftX="750" topLeftY="311" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="128" height="144" topLeftX="750" topLeftY="309" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="UNDMbqjOzo02bPxl4eMcBP41nmc" width="63" height="63" topLeftX="782" topLeftY="326"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="114" height="21" topLeftX="756" topLeftY="397" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">姓名</span> - </p> - </content> - </shape> - <shape width="114" height="18" topLeftX="756" topLeftY="422" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">职能</span> - </p> - </content> - </shape> - <img src="Nz2Bbvq9joLfAxxjnA1c2d2dnyc" width="38" height="40" topLeftX="163" topLeftY="231" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Nz2Bbvq9joLfAxxjnA1c2d2dnyc" width="38" height="40" topLeftX="331" topLeftY="127" rotation="270" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Nz2Bbvq9joLfAxxjnA1c2d2dnyc" width="38" height="40" topLeftX="409" topLeftY="232" rotation="90" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Nz2Bbvq9joLfAxxjnA1c2d2dnyc" width="38" height="40" topLeftX="674" topLeftY="127" rotation="270" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Nz2Bbvq9joLfAxxjnA1c2d2dnyc" width="38" height="40" topLeftX="750" topLeftY="233" rotation="90" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KljObYVJUoEkGnx7C3qcENPknHb" width="38" height="40" topLeftX="164" topLeftY="308" rotation="270" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KljObYVJUoEkGnx7C3qcENPknHb" width="38" height="40" topLeftX="241" topLeftY="413" rotation="90" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KljObYVJUoEkGnx7C3qcENPknHb" width="38" height="40" topLeftX="497" topLeftY="308" rotation="270" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KljObYVJUoEkGnx7C3qcENPknHb" width="38" height="40" topLeftX="678" topLeftY="413" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KljObYVJUoEkGnx7C3qcENPknHb" width="38" height="40" topLeftX="750" topLeftY="413" rotation="90" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OnEabmzmnoWL07xAWancWJhun3f" width="103" height="12" topLeftX="186" topLeftY="71"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Business Objective</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">业务目标</p> - </content> - </shape> - <img src="RElNb64QeopwDaxjD6CcK0FGnwv" width="103" height="12" topLeftX="215" topLeftY="71"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="362" topLeftX="51" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="49" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="42" topLeftX="66" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(19, 147, 207, 1)" fontSize="14">O1:</span> - </strong> - <span color="rgba(19, 147, 207, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <line startX="83" startY="213" endX="83" endY="386"> - <border color="rgba(141, 201, 236, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="54" topLeftX="108" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="250" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="108" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="346" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="108" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="441" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="261" height="362" topLeftX="351" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="349" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="42" topLeftX="366" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(247, 193, 95, 1)" fontSize="14">O2:</span> - </strong> - <span color="rgba(247, 193, 95, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <line startX="383" startY="213" endX="383" endY="386"> - <border color="rgba(255, 224, 136, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="54" topLeftX="408" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="250" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="408" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="346" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="408" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="441" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="261" height="362" topLeftX="651" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="649" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="42" topLeftX="666" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(84, 213, 217, 1)" fontSize="14">O3:</span> - </strong> - <span color="rgba(35, 195, 192, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="667" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(35, 195, 192, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="667" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(35, 195, 192, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="667" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(35, 195, 192, 1)"/> - </fill> - </shape> - <line startX="683" startY="213" endX="683" endY="386"> - <border color="rgba(35, 195, 192, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="54" topLeftX="708" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="708" topLeftY="250" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="708" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="708" topLeftY="346" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名</span> - </em> - <span fontSize="12">”</span> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="708" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="708" topLeftY="441" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="668" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="668" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="668" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 246, 220, 1)"/> - </fill> - </style> - <data> - <img src="AZbNbhTvDo08gzx2zmTc5jfwnMg" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EP1JbjIGzoTdKHx0hNFclSWjnpd" width="135" height="77" topLeftX="828" topLeftY="0" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EP1JbjIGzoTdKHx0hNFclSWjnpd" width="135" height="77" topLeftX="0" topLeftY="463" rotation="180" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Business Decomposition</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p>业务拆解</p> - </content> - </shape> - <shape width="193" height="257" topLeftX="52" topLeftY="170" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="51" topLeftY="167" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="275" topLeftY="170" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="273" topLeftY="167" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="497" topLeftY="170" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="496" topLeftY="167" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="720" topLeftY="170" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="193" height="257" topLeftX="718" topLeftY="167" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="152" height="42" topLeftX="78" topLeftY="207" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">业务拆解一标题,业务拆解一标题</span> - </p> - </content> - </shape> - <shape width="152" height="54" topLeftX="78" topLeftY="262" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="63" topLeftY="268" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="54" topLeftX="78" topLeftY="330" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="63" topLeftY="335" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="42" topLeftX="299" topLeftY="207" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">业务拆解一标题,业务拆解一标题</span> - </p> - </content> - </shape> - <shape width="152" height="42" topLeftX="522" topLeftY="207" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">业务拆解一标题,业务拆解一标题</span> - </p> - </content> - </shape> - <shape width="152" height="54" topLeftX="522" topLeftY="262" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="507" topLeftY="268" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="54" topLeftX="522" topLeftY="330" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="507" topLeftY="335" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="42" topLeftX="742" topLeftY="207" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">业务拆解一标题,业务拆解一标题</span> - </p> - </content> - </shape> - <shape width="152" height="36" topLeftX="742" topLeftY="262" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="727" topLeftY="268" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="36" topLeftX="742" topLeftY="308" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="727" topLeftY="314" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="60" height="60" topLeftX="119" topLeftY="137" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="124" topLeftY="142" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="137" topLeftY="154" iconType="iconpark/Office/compression.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="60" height="60" topLeftX="342" topLeftY="137" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="347" topLeftY="142" type="ellipse"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="360" topLeftY="154" iconType="iconpark/Base/save-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="60" height="60" topLeftX="564" topLeftY="137" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="569" topLeftY="142" type="ellipse"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="582" topLeftY="154" iconType="iconpark/Office/file-cabinet.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="60" height="60" topLeftX="787" topLeftY="137" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="792" topLeftY="142" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="805" topLeftY="154" iconType="iconpark/Office/folder-code.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="152" height="36" topLeftX="742" topLeftY="356" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="727" topLeftY="361" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="36" topLeftX="299" topLeftY="262" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="284" topLeftY="268" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="36" topLeftX="299" topLeftY="308" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="284" topLeftY="314" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <shape width="152" height="36" topLeftX="299" topLeftY="356" type="text"> - <content textType="headline" fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="12" height="8" topLeftX="284" topLeftY="361" rotation="90" type="triangle"> - <fill> - <fillColor color="rgba(247, 193, 95, 1)"/> - </fill> - </shape> - <img src="CjHhbWKFfowop0xU6lycd2r8nFf" width="103" height="12" topLeftX="248" topLeftY="71"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(34, 38, 41, 1)"/> - </fill> - </style> - <data> - <img src="BbgxbapUsowgUxxvPq1cc2TJnYd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GYslbhG0AoRPLbxG4QPcbTpunTc" width="960" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="75" bottomOffset="116" presetHandlers="0"/> - </img> - <img src="FnAFboETEoDtHdxsLZIcto8nnYc" width="103" height="12" topLeftX="809" topLeftY="489"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="99" topLeftX="196" topLeftY="223" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="132" height="132" topLeftX="769" topLeftY="-17" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="769" topLeftY="74" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="100" height="99" topLeftX="191" topLeftY="218" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="72" height="18" topLeftX="68" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <img src="OvVIbXxqioTTT8xXAckcWzYBnYg" width="24" height="24" topLeftX="31" topLeftY="37" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="BiE0bg77Poe1ZTxonW1ckyVBnfg" width="12" height="32" topLeftX="31" topLeftY="479"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="30" topLeftX="191" topLeftY="275" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center">PART 2</p> - </content> - </shape> - <shape width="407" height="63" topLeftX="335" topLeftY="284" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="407" height="72" topLeftX="334" topLeftY="199" type="text"> - <content textType="title" fontSize="48" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>完成情况</p> - </content> - </shape> - <icon width="40" height="40" topLeftX="221" topLeftY="232" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Task Achievement</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">完成情况</p> - </content> - </shape> - <img src="RElNb64QeopwDaxjD6CcK0FGnwv" width="103" height="12" topLeftX="209" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <line startX="51" startY="254" endX="909" endY="254"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="51" startY="364" endX="909" endY="364"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="694" startY="131" endX="694" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="464" startY="131" endX="464" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="234" startY="131" endX="234" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="174" height="42" topLeftX="51" topLeftY="177" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="14">O1:</span> - <span color="rgba(41, 71, 152, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="174" height="42" topLeftX="51" topLeftY="394" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(35, 195, 192, 1)" fontSize="14">O3: </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="174" height="42" topLeftX="51" topLeftY="289" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(247, 193, 95, 1)" fontSize="14">O2: </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="200" height="24" topLeftX="249" topLeftY="128" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="16">6 月</span> - </p> - </content> - </shape> - <shape width="200" height="24" topLeftX="479" topLeftY="128" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="16">7月</span> - </p> - </content> - </shape> - <shape width="200" height="24" topLeftX="709" topLeftY="128" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="16">8月</span> - </p> - </content> - </shape> - <shape width="240" height="20" topLeftX="243" topLeftY="172" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="思源黑体" bold="false">子任务</span> - </p> - </content> - </shape> - <shape width="160" height="20" topLeftX="379" topLeftY="198" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="300" height="20" topLeftX="609" topLeftY="224" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="212" height="18" topLeftX="343" topLeftY="263" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="212" height="18" topLeftX="482" topLeftY="288" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="265" height="18" topLeftX="458" topLeftY="313" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="240" height="20" topLeftX="408" topLeftY="370" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="200" height="20" topLeftX="591" topLeftY="395" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="180" height="20" topLeftX="729" topLeftY="420" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="400" height="20" topLeftX="375" topLeftY="445" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="240" height="20" topLeftX="633" topLeftY="340" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Task Achievement</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">完成情况</p> - </content> - </shape> - <img src="C8c6bWxJFo1IPXxoIyfc70XYnzS" width="103" height="12" topLeftX="209" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="362" topLeftX="51" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="49" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="83" startY="213" endX="83" endY="386"> - <border color="rgba(141, 201, 236, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="36" topLeftX="108" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="233" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 90%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="175" topLeftY="240" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="100" height="6" topLeftX="175" topLeftY="240" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="255" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="36" topLeftX="108" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="329" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="175" topLeftY="336" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="115" height="6" topLeftX="175" topLeftY="336" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="351" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="36" topLeftX="108" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="425" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="175" topLeftY="432" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="115" height="6" topLeftX="175" topLeftY="432" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="447" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="261" height="362" topLeftX="351" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="349" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <line startX="383" startY="213" endX="383" endY="386"> - <border color="rgba(247, 193, 95, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="36" topLeftX="408" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="233" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 85%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="475" topLeftY="240" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="80" height="6" topLeftX="475" topLeftY="240" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="255" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="36" topLeftX="408" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="329" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 80%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="475" topLeftY="336" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="80" height="6" topLeftX="475" topLeftY="336" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="351" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="36" topLeftX="408" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="425" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="475" topLeftY="432" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="115" height="6" topLeftX="475" topLeftY="432" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="447" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <shape width="261" height="362" topLeftX="645" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="642" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="32" height="20" topLeftX="661" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="662" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="661" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="661" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <line startX="677" startY="213" endX="677" endY="386"> - <border color="rgba(84, 213, 217, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="36" topLeftX="701" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="701" topLeftY="233" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="768" topLeftY="240" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="115" height="6" topLeftX="768" topLeftY="240" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="701" topLeftY="255" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="36" topLeftX="701" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="701" topLeftY="329" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 86%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="768" topLeftY="336" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="90" height="6" topLeftX="768" topLeftY="336" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="701" topLeftY="351" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="36" topLeftX="701" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="701" topLeftY="425" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="768" topLeftY="432" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="115" height="6" topLeftX="768" topLeftY="432" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="701" topLeftY="447" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="662" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="662" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <shape width="230" height="42" topLeftX="66" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(19, 147, 207, 1)" fontSize="14">O1:</span> - </strong> - <span color="rgba(19, 147, 207, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="230" height="42" topLeftX="366" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(247, 193, 95, 1)" fontSize="14">O2:</span> - </strong> - <span color="rgba(247, 193, 95, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="230" height="42" topLeftX="666" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(84, 213, 217, 1)" fontSize="14">O3:</span> - </strong> - <span color="rgba(35, 195, 192, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(221, 239, 247, 1)"/> - </fill> - </style> - <data> - <img src="PZwgbRQYEohPXzxJeNkcTBqDnUb" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GOIIbzQj8ojJ0YxXVO4cvaGMn7b" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Task Achievement</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">完成情况</p> - </content> - </shape> - <shape width="283" height="98" topLeftX="53" topLeftY="148" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="283" height="98" topLeftX="51" topLeftY="149" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="568" height="36" topLeftX="356" topLeftY="148" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">进展 1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <span color="rgba(0, 0, 0, 1)" fontSize="12"> </span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <line startX="344" startY="252" endX="909" endY="252"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="553" height="18" topLeftX="356" topLeftY="195" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">进展 2:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <span color="rgba(0, 0, 0, 1)" fontSize="12"> </span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="553" height="18" topLeftX="356" topLeftY="221" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">进展 3:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <span color="rgba(0, 0, 0, 1)" fontSize="12"> </span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="283" height="98" topLeftX="53" topLeftY="270" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="283" height="98" topLeftX="51" topLeftY="270" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="243" height="36" topLeftX="71" topLeftY="287" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">KR2:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="552" height="36" topLeftX="356" topLeftY="270" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">进展 1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <line startX="344" startY="374" endX="909" endY="374"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="553" height="18" topLeftX="356" topLeftY="317" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 2:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <em> - <span color="rgba(155, 158, 162, 1)">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="553" height="18" topLeftX="356" topLeftY="344" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 3:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <em> - <span color="rgba(155, 158, 162, 1)">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="283" height="98" topLeftX="53" topLeftY="393" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="283" height="98" topLeftX="51" topLeftY="393" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="243" height="36" topLeftX="71" topLeftY="411" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">KR3:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="552" height="36" topLeftX="356" topLeftY="393" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">进展 1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <line startX="344" startY="496" endX="909" endY="496"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="553" height="18" topLeftX="356" topLeftY="440" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 2:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <em> - <span color="rgba(155, 158, 162, 1)">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="553" height="18" topLeftX="356" topLeftY="467" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 3:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - <em> - <span color="rgba(155, 158, 162, 1)">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="243" height="36" topLeftX="71" topLeftY="165" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">KR1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="868" height="30" topLeftX="51" topLeftY="101" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)">O1: </span> - <span color="rgba(43, 47, 54, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="71" topLeftY="213" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 90%</span> - </p> - </content> - </shape> - <shape width="180" height="6" topLeftX="138" topLeftY="220" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="183" height="18" topLeftX="71" topLeftY="332" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="138" topLeftY="339" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="247" height="18" topLeftX="71" topLeftY="458" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">进度: 100%</span> - </p> - </content> - </shape> - <shape width="115" height="6" topLeftX="138" topLeftY="465" presetHandlers="16" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="SLMUb0IB4ohwq2xY9lBcR5KTnWd" width="38" height="40" topLeftX="295" topLeftY="328" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SLMUb0IB4ohwq2xY9lBcR5KTnWd" width="38" height="40" topLeftX="295" topLeftY="207" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SLMUb0IB4ohwq2xY9lBcR5KTnWd" width="38" height="40" topLeftX="295" topLeftY="451" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="160" height="6" topLeftX="138" topLeftY="220" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="180" height="6" topLeftX="138" topLeftY="339" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="180" height="6" topLeftX="138" topLeftY="465" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <img src="KFarbLFdZoZUyQxszvxc4jmFnYg" width="103" height="12" topLeftX="209" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 246, 220, 1)"/> - </fill> - </style> - <data> - <img src="AZbNbhTvDo08gzx2zmTc5jfwnMg" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EP1JbjIGzoTdKHx0hNFclSWjnpd" width="135" height="77" topLeftX="828" topLeftY="0" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EP1JbjIGzoTdKHx0hNFclSWjnpd" width="135" height="77" topLeftX="0" topLeftY="463" rotation="180" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Task Achievement</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">完成情况</p> - </content> - </shape> - <shape width="260" height="323" topLeftX="644" topLeftY="181" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="260" height="323" topLeftX="644" topLeftY="178" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="260" height="323" topLeftX="50" topLeftY="181" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="260" height="323" topLeftX="51" topLeftY="178" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="240" height="42" topLeftX="61" topLeftY="260" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="260" height="323" topLeftX="348" topLeftY="181" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="260" height="323" topLeftX="347" topLeftY="178" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="240" height="42" topLeftX="357" topLeftY="260" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 2:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="240" height="42" topLeftX="654" topLeftY="260" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">进展 3:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <img src="CYN0bNVzJoNkE6xrzygcvi4zndh" width="240" height="170" topLeftX="61" topLeftY="319"> - <crop type="round-rect" leftOffset="32" rightOffset="32" topOffset="0" bottomOffset="0" presetHandlers="4"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="V5cDb09NbomVpexuCDycvZuinBe" width="240" height="170" topLeftX="357" topLeftY="319"> - <crop type="round-rect" leftOffset="32" rightOffset="32" topOffset="0" bottomOffset="0" presetHandlers="4"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="UERRbDVXkoFMX5x7Jidca4Lsnzf" width="240" height="170" topLeftX="654" topLeftY="319"> - <crop type="round-rect" leftOffset="32" rightOffset="32" topOffset="0" bottomOffset="0" presetHandlers="4"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="60" height="60" topLeftX="744" topLeftY="192" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="749" topLeftY="197" type="ellipse"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="762" topLeftY="210" iconType="iconpark/Office/folder-focus.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="60" height="60" topLeftX="447" topLeftY="192" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="452" topLeftY="197" type="ellipse"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="465" topLeftY="210" iconType="iconpark/Office/file-cabinet.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="60" height="60" topLeftX="151" topLeftY="192" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="50" height="50" topLeftX="156" topLeftY="197" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <icon width="24" height="24" topLeftX="169" topLeftY="210" iconType="iconpark/Office/file-conversion.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="859" height="30" topLeftX="51" topLeftY="101" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)">O1: </span> - <span color="rgba(43, 47, 54, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="859" height="21" topLeftX="51" topLeftY="135" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">KR1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <img src="Vxtbbvy1SoHnhPxqu5jcO1CmnEb" width="103" height="12" topLeftX="209" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Task Achievement</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">完成情况</p> - </content> - </shape> - <img src="WUA5bK6EuoiZ9dxYr92cHormnLd" width="103" height="12" topLeftX="209" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="868" height="30" topLeftX="49" topLeftY="101" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)">某数据同步增长近五成</span> - </p> - </content> - </shape> - <shape width="870" height="21" topLeftX="49" topLeftY="136" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题。</span> - </p> - </content> - </shape> - <shape width="336" height="284" topLeftX="53" topLeftY="180" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="335" height="284" topLeftX="51" topLeftY="180" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="91" startY="223" endX="362" endY="223"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="91" startY="265" endX="362" endY="265"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="91" startY="348" endX="362" endY="348"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="91" startY="306" endX="362" endY="306"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="91" startY="389" endX="362" endY="389"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="319" height="21" topLeftX="61" topLeftY="191" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)">标题</span> - </p> - </content> - </shape> - <shape width="20" height="18" topLeftX="65" topLeftY="375" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="right"> - <p textAlign="right"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">0</span> - </p> - </content> - </shape> - <shape width="20" height="18" topLeftX="65" topLeftY="334" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="right"> - <p textAlign="right"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">10</span> - </p> - </content> - </shape> - <shape width="20" height="18" topLeftX="65" topLeftY="293" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="right"> - <p textAlign="right"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">20</span> - </p> - </content> - </shape> - <shape width="20" height="18" topLeftX="65" topLeftY="252" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="right"> - <p textAlign="right"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">30</span> - </p> - </content> - </shape> - <shape width="20" height="18" topLeftX="65" topLeftY="210" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="right"> - <p textAlign="right"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">40</span> - </p> - </content> - </shape> - <shape width="10" height="98" topLeftX="99" topLeftY="292" type="rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="10" height="50" topLeftX="116" topLeftY="339" type="rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="10" height="160" topLeftX="134" topLeftY="229" type="rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="10" height="84" topLeftX="171" topLeftY="306" type="rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="10" height="100" topLeftX="189" topLeftY="289" type="rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="10" height="137" topLeftX="207" topLeftY="252" type="rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="10" height="113" topLeftX="244" topLeftY="276" type="rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="10" height="58" topLeftX="262" topLeftY="331" type="rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="10" height="120" topLeftX="280" topLeftY="269" type="rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="10" height="120" topLeftX="317" topLeftY="269" type="rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="10" height="80" topLeftX="334" topLeftY="309" type="rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="10" height="120" topLeftX="352" topLeftY="269" type="rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="50" height="18" topLeftX="95" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="50" height="18" topLeftX="168" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="50" height="18" topLeftX="241" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="50" height="18" topLeftX="315" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="10" height="10" topLeftX="72" topLeftY="422" type="rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="50" height="18" topLeftX="89" topLeftY="417" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="50" height="18" topLeftX="199" topLeftY="417" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="50" height="18" topLeftX="309" topLeftY="417" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="12">数据</span> - </p> - </content> - </shape> - <shape width="10" height="10" topLeftX="185" topLeftY="422" type="rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="291" topLeftY="422" type="rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - </shape> - <shape width="233" height="80" topLeftX="418" topLeftY="179" type="round1rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 0.1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="88" height="36" topLeftX="433" topLeftY="201" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">订单量同步去年增长近</span> - </p> - </content> - </shape> - <shape width="40" height="25" topLeftX="522" topLeftY="206" rotation="270" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 253, 1) 0%,rgba(144, 201, 236, 1) 100%)"/> - </fill> - </shape> - <shape width="103" height="60" topLeftX="562" topLeftY="189" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(19, 147, 207, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="40" fontFamily="Arial">160</span> - <span color="rgba(19, 147, 207, 1)" fontSize="12" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="233" height="80" topLeftX="676" topLeftY="179" type="round1rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 0.1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="88" height="36" topLeftX="691" topLeftY="201" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">订单量同步去年增长近</span> - </p> - </content> - </shape> - <shape width="40" height="25" topLeftX="779" topLeftY="207" rotation="270" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 253, 1) 0%,rgba(144, 201, 236, 1) 100%)"/> - </fill> - </shape> - <shape width="103" height="60" topLeftX="820" topLeftY="189" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(19, 147, 207, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="40" fontFamily="Arial">90</span> - <span color="rgba(19, 147, 207, 1)" fontSize="12" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="233" height="80" topLeftX="418" topLeftY="286" type="round1rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 0.1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="88" height="36" topLeftX="433" topLeftY="308" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">订单量同步去年增长近</span> - </p> - </content> - </shape> - <shape width="40" height="25" topLeftX="522" topLeftY="313" rotation="270" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 253, 1) 0%,rgba(144, 201, 236, 1) 100%)"/> - </fill> - </shape> - <shape width="103" height="60" topLeftX="562" topLeftY="296" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(19, 147, 207, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="40" fontFamily="Arial">120</span> - <span color="rgba(19, 147, 207, 1)" fontSize="12" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="233" height="80" topLeftX="418" topLeftY="390" type="round1rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 0.1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="88" height="36" topLeftX="433" topLeftY="412" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">订单量同步去年增长近</span> - </p> - </content> - </shape> - <shape width="40" height="25" topLeftX="522" topLeftY="417" rotation="270" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 253, 1) 0%,rgba(144, 201, 236, 1) 100%)"/> - </fill> - </shape> - <shape width="103" height="60" topLeftX="562" topLeftY="400" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(19, 147, 207, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="40" fontFamily="Arial">280</span> - <span color="rgba(19, 147, 207, 1)" fontSize="12" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="233" height="80" topLeftX="676" topLeftY="390" type="round1rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 0.1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="88" height="36" topLeftX="691" topLeftY="412" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">订单量同步去年增长近</span> - </p> - </content> - </shape> - <shape width="40" height="25" topLeftX="779" topLeftY="418" rotation="270" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 253, 1) 0%,rgba(144, 201, 236, 1) 100%)"/> - </fill> - </shape> - <shape width="103" height="60" topLeftX="820" topLeftY="400" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(19, 147, 207, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="40" fontFamily="Arial">20</span> - <span color="rgba(19, 147, 207, 1)" fontSize="12" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="233" height="80" topLeftX="676" topLeftY="286" type="round1rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 0.1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="88" height="36" topLeftX="691" topLeftY="308" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">订单量同步去年增长近</span> - </p> - </content> - </shape> - <shape width="40" height="25" topLeftX="779" topLeftY="313" rotation="270" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 253, 1) 0%,rgba(144, 201, 236, 1) 100%)"/> - </fill> - </shape> - <shape width="103" height="60" topLeftX="820" topLeftY="296" type="text"> - <content fontSize="12" fontFamily="Arial" color="rgba(19, 147, 207, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="40" fontFamily="Arial">170</span> - <span color="rgba(19, 147, 207, 1)" fontSize="12" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <img src="Brebbm81boxxu9x7lNScnFUqndh" width="40" height="12" topLeftX="200" topLeftY="173"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(34, 38, 41, 1)"/> - </fill> - </style> - <data> - <img src="BbgxbapUsowgUxxvPq1cc2TJnYd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GYslbhG0AoRPLbxG4QPcbTpunTc" width="960" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="75" bottomOffset="116" presetHandlers="0"/> - </img> - <img src="FnAFboETEoDtHdxsLZIcto8nnYc" width="103" height="12" topLeftX="809" topLeftY="489"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="99" topLeftX="196" topLeftY="223" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="132" height="132" topLeftX="769" topLeftY="-17" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="769" topLeftY="74" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="100" height="99" topLeftX="191" topLeftY="218" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="72" height="18" topLeftX="68" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <img src="OvVIbXxqioTTT8xXAckcWzYBnYg" width="24" height="24" topLeftX="31" topLeftY="37" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="BiE0bg77Poe1ZTxonW1ckyVBnfg" width="12" height="32" topLeftX="31" topLeftY="479"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="30" topLeftX="191" topLeftY="275" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center">PART 3</p> - </content> - </shape> - <shape width="407" height="63" topLeftX="335" topLeftY="284" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="407" height="72" topLeftX="334" topLeftY="199" type="text"> - <content textType="title" fontSize="48" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>经验反思</p> - </content> - </shape> - <icon width="40" height="40" topLeftX="221" topLeftY="232" iconType="iconpark/Base/tips.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 246, 220, 1)"/> - </fill> - </style> - <data> - <img src="AZbNbhTvDo08gzx2zmTc5jfwnMg" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EP1JbjIGzoTdKHx0hNFclSWjnpd" width="135" height="77" topLeftX="828" topLeftY="0" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EP1JbjIGzoTdKHx0hNFclSWjnpd" width="135" height="77" topLeftX="0" topLeftY="463" rotation="180" alpha="0.6"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Review And Summary</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">业务复盘</p> - </content> - </shape> - <shape width="868" height="30" topLeftX="51" topLeftY="101" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)">O1: </span> - <span color="rgba(43, 47, 54, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="864" height="21" topLeftX="51" topLeftY="135" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">KR1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="524" height="140" topLeftX="53" topLeftY="174" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="524" height="140" topLeftX="51" topLeftY="172" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="470" height="24" topLeftX="87" topLeftY="190" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="16">做的好的</span> - </p> - </content> - </shape> - <shape width="491" height="63" topLeftX="67" topLeftY="227" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <ul> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="524" height="140" topLeftX="387" topLeftY="343" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="524" height="140" topLeftX="385" topLeftY="341" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="470" height="24" topLeftX="421" topLeftY="359" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="16">待改进点</span> - </p> - </content> - </shape> - <shape width="491" height="63" topLeftX="401" topLeftY="396" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <ul> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - </ul> - </content> - </shape> - <img src="KPu8b7LzBoWDKlxVPhTcOpexndd" width="306" height="144" topLeftX="609" topLeftY="172"> - <crop type="round1rect" leftOffset="0" rightOffset="0" topOffset="12" bottomOffset="12" presetHandlers="21"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="JKqHbAW8aoe0HQxplScc7RFTn9b" width="306" height="144" topLeftX="51" topLeftY="341"> - <crop type="round1rect" leftOffset="0" rightOffset="0" topOffset="12" bottomOffset="12" presetHandlers="21"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="NrvbbvoUIoLyqVxG4cbcYt4inNb" width="40" height="12" topLeftX="536" topLeftY="166"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="NrvbbvoUIoLyqVxG4cbcYt4inNb" width="40" height="12" topLeftX="869" topLeftY="335"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <icon width="20" height="20" topLeftX="63" topLeftY="193" iconType="iconpark/Hands/good-two.svg"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="396" topLeftY="362" iconType="iconpark/Charts/data-arrival.svg"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="WRLPbnASJoO8KixZpffcmaGanTe" width="103" height="12" topLeftX="232" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(221, 239, 247, 1)"/> - </fill> - </style> - <data> - <img src="PZwgbRQYEohPXzxJeNkcTBqDnUb" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GOIIbzQj8ojJ0YxXVO4cvaGMn7b" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Review And Summary</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p textAlign="left">业务复盘</p> - </content> - </shape> - <shape width="868" height="30" topLeftX="51" topLeftY="101" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)">O1:</span> - <span color="rgba(41, 71, 152, 1)"> </span> - <span color="rgba(43, 47, 54, 1)">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="828" height="21" topLeftX="51" topLeftY="135" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">KR1:输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="401" height="308" topLeftX="59" topLeftY="187" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="401" height="316" topLeftX="59" topLeftY="176" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="352" height="24" topLeftX="99" topLeftY="192" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="16">遇到问题</span> - </p> - </content> - </shape> - <shape width="352" height="105" topLeftX="84" topLeftY="228" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <ul> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </li> - </ul> - </content> - </shape> - <img src="GNFJb9cTnoQ7eExha71cQJ7wnDb" width="386" height="128" topLeftX="66" topLeftY="356"> - <crop type="round-rect" leftOffset="0" rightOffset="0" topOffset="44" bottomOffset="44" presetHandlers="4"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="401" height="308" topLeftX="499" topLeftY="187" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="401" height="316" topLeftX="499" topLeftY="176" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="344" height="24" topLeftX="547" topLeftY="192" type="text"> - <content textType="headline" fontSize="16" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="16">改进措施</span> - </p> - </content> - </shape> - <shape width="344" height="105" topLeftX="532" topLeftY="228" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <ul> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </li> - <li> - <p textAlign="left"> - <span color="rgba(102, 102, 102, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </li> - </ul> - </content> - </shape> - <img src="Ao2dbDGVco9V2wxLKS9cFtWynzb" width="386" height="128" topLeftX="506" topLeftY="356"> - <crop type="round-rect" leftOffset="0" rightOffset="0" topOffset="44" bottomOffset="44" presetHandlers="4"/> - <border width="1" lineJoin="miter" miterLimit="10"/> - </img> - <icon width="20" height="20" topLeftX="72" topLeftY="195" iconType="iconpark/Others/thinking-problem.svg"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="517" topLeftY="195" iconType="iconpark/Office/level.svg"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="BKLubjyl2ocINoxtwo8cQehinKg" width="103" height="12" topLeftX="232" topLeftY="72"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="F9ysbSCvVo4CWFxjdhXcp9Gxndb" width="40" height="12" topLeftX="860" topLeftY="170"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="F9ysbSCvVo4CWFxjdhXcp9Gxndb" width="40" height="12" topLeftX="421" topLeftY="170"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(34, 38, 41, 1)"/> - </fill> - </style> - <data> - <img src="BbgxbapUsowgUxxvPq1cc2TJnYd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GYslbhG0AoRPLbxG4QPcbTpunTc" width="960" height="540" topLeftX="0" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="75" bottomOffset="116" presetHandlers="0"/> - </img> - <img src="FnAFboETEoDtHdxsLZIcto8nnYc" width="103" height="12" topLeftX="809" topLeftY="489"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="99" topLeftX="196" topLeftY="223" type="round2diag-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="132" height="132" topLeftX="769" topLeftY="-17" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="769" topLeftY="74" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="100" height="99" topLeftX="191" topLeftY="218" type="round2diag-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(31, 35, 41, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="72" height="18" topLeftX="68" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <img src="OvVIbXxqioTTT8xXAckcWzYBnYg" width="24" height="24" topLeftX="31" topLeftY="37" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="BiE0bg77Poe1ZTxonW1ckyVBnfg" width="12" height="32" topLeftX="31" topLeftY="479"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="100" height="30" topLeftX="191" topLeftY="275" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p textAlign="center">PART 4</p> - </content> - </shape> - <shape width="407" height="63" topLeftX="335" topLeftY="284" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="407" height="72" topLeftX="334" topLeftY="199" type="text"> - <content textType="title" fontSize="48" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>后续计划</p> - </content> - </shape> - <icon width="40" height="40" topLeftX="221" topLeftY="232" iconType="iconpark/Office/doc-detail.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Short-Term Objective</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p>短期目标</p> - </content> - </shape> - <img src="FcRsb15VFojqK6xzvkNco7Vin3f" width="103" height="12" topLeftX="224" topLeftY="71"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="362" topLeftX="51" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="49" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="42" topLeftX="66" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(19, 147, 207, 1)" fontSize="14">O1:</span> - </strong> - <span color="rgba(19, 147, 207, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="67" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="68" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <line startX="83" startY="213" endX="83" endY="386"> - <border color="rgba(141, 201, 236, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="54" topLeftX="108" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="250" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="108" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="346" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="108" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="108" topLeftY="441" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="261" height="362" topLeftX="351" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="349" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="42" topLeftX="366" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(247, 193, 95, 1)" fontSize="14">O2:</span> - </strong> - <span color="rgba(247, 193, 95, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="367" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - </shape> - <line startX="383" startY="213" endX="383" endY="386"> - <border color="rgba(255, 224, 136, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="54" topLeftX="408" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="250" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="408" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="346" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="408" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="408" topLeftY="441" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="261" height="362" topLeftX="651" topLeftY="123" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="261" height="362" topLeftX="649" topLeftY="120" flipX="true" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="230" height="42" topLeftX="666" topLeftY="137" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(84, 213, 217, 1)" fontSize="14">O3:</span> - </strong> - <span color="rgba(35, 195, 192, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的业务目标,输入相关的业务目标</span> - </p> - </content> - </shape> - <shape width="32" height="20" topLeftX="667" topLeftY="197" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(35, 195, 192, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="667" topLeftY="292" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(35, 195, 192, 1)"/> - </fill> - </shape> - <shape width="32" height="20" topLeftX="667" topLeftY="388" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(35, 195, 192, 1)"/> - </fill> - </shape> - <line startX="683" startY="213" endX="683" endY="386"> - <border color="rgba(35, 195, 192, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="183" height="54" topLeftX="708" topLeftY="192" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="708" topLeftY="250" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="708" topLeftY="288" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="708" topLeftY="346" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名</span> - </em> - <span fontSize="12">”</span> - </p> - </content> - </shape> - <shape width="183" height="54" topLeftX="708" topLeftY="384" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="12">输入相关的描述信息以解释标题;输入相关的描述信息以解释标题;输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="183" height="18" topLeftX="708" topLeftY="441" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">负责人:</span> - <em> - <span color="rgba(155, 158, 162, 1)" fontSize="12">输入“@+人名”</span> - </em> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="368" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="668" topLeftY="198" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR1</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="668" topLeftY="293" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR2</span> - </p> - </content> - </shape> - <shape width="30" height="18" topLeftX="668" topLeftY="389" type="text"> - <content fontSize="16" fontFamily="Arial" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="12" fontFamily="Arial">KR3</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="963" height="540" topLeftX="-3" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(244, 244, 242, 1)"/> - </fill> - </shape> - <shape width="963" height="540" topLeftX="-1" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="29" topLeftY="431" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="HFdYbDeNvosW0BxcRdBcxRPonsh" width="80" height="139" topLeftX="851" topLeftY="-29" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="E3p7boCbJoZiGsxZ98ucT5DbnRf" width="24" height="12" topLeftX="816" topLeftY="30"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OaLab1wvOo648bxy3ejcT72inIe" width="14" height="41" topLeftX="55" topLeftY="39"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <line startX="587" startY="131" endX="587" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="409" startY="131" endX="409" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="764" startY="131" endX="764" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="160" height="21" topLeftX="241" topLeftY="120" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Q1</span> - </p> - </content> - </shape> - <shape width="160" height="21" topLeftX="418" topLeftY="120" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Q2</span> - </p> - </content> - </shape> - <shape width="160" height="21" topLeftX="595" topLeftY="120" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Q3</span> - </p> - </content> - </shape> - <shape width="160" height="21" topLeftX="773" topLeftY="120" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(43, 47, 54, 1)" fontSize="14">Q4</span> - </p> - </content> - </shape> - <shape width="403" height="21" topLeftX="77" topLeftY="67" type="text"> - <content textType="sub-headline" fontSize="14" fontFamily="思源黑体" color="rgba(102, 102, 102, 1)" bold="false"> - <p>Long-Term Objectives</p> - </content> - </shape> - <shape width="403" height="36" topLeftX="77" topLeftY="30" type="text"> - <content textType="sub-headline" fontSize="24" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="true"> - <p>长期目标</p> - </content> - </shape> - <img src="FcRsb15VFojqK6xzvkNco7Vin3f" width="103" height="12" topLeftX="224" topLeftY="71"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <line startX="51" startY="254" endX="909" endY="254"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="51" startY="364" endX="909" endY="364"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="234" startY="131" endX="234" endY="467"> - <border color="rgba(155, 158, 162, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="174" height="42" topLeftX="51" topLeftY="177" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(19, 147, 207, 1)" fontSize="14">O1:</span> - <span color="rgba(41, 71, 152, 1)" fontSize="14"> </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="174" height="42" topLeftX="51" topLeftY="394" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(35, 195, 192, 1)" fontSize="14">O3: </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="174" height="42" topLeftX="51" topLeftY="289" type="text"> - <content textType="headline" fontSize="14" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(247, 193, 95, 1)" fontSize="14">O2: </span> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释标题</span> - </p> - </content> - </shape> - <shape width="240" height="20" topLeftX="243" topLeftY="156" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12" fontFamily="思源黑体" bold="false">子任务</span> - </p> - </content> - </shape> - <shape width="160" height="20" topLeftX="448" topLeftY="180" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="300" height="20" topLeftX="609" topLeftY="228" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="212" height="18" topLeftX="257" topLeftY="260" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="false"> - <p> - <span color="rgba(31, 35, 41, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="212" height="18" topLeftX="482" topLeftY="285" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="false"> - <p> - <span color="rgba(31, 35, 41, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="265" height="18" topLeftX="363" topLeftY="310" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="false"> - <p> - <span color="rgba(31, 35, 41, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="240" height="20" topLeftX="279" topLeftY="370" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="200" height="20" topLeftX="591" topLeftY="395" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="180" height="20" topLeftX="701" topLeftY="420" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="400" height="20" topLeftX="375" topLeftY="445" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(84, 213, 217, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="240" height="20" topLeftX="633" topLeftY="337" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(255, 224, 136, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(31, 35, 41, 1)" bold="false"> - <p> - <span color="rgba(31, 35, 41, 1)">子任务</span> - </p> - </content> - </shape> - <shape width="280" height="20" topLeftX="418" topLeftY="204" presetHandlers="4" type="round-rect"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="12" fontFamily="思源黑体" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">子任务</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(34, 38, 41, 1)"/> - </fill> - </style> - <data> - <shape width="245" height="321" topLeftX="-18" topLeftY="219" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="470" height="470" topLeftX="-242" topLeftY="0" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="410" height="410" topLeftX="-212" topLeftY="30" type="slides-block-arc"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <img src="CHIvb1lRHoFw5PxLzlwc29OVnx1" width="346" height="346" topLeftX="-180" topLeftY="62"> - <crop type="rect" leftOffset="136" rightOffset="136" topOffset="0" bottomOffset="0" presetHandlers="200"/> - </img> - <shape width="37" height="37" topLeftX="286" topLeftY="58" type="ellipse"> - <border color="rgba(102, 102, 102, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="306" topLeftY="87" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <img src="Vt4Vbmu6gourQ6xmTUqc0ZSgnIb" width="86" height="10" topLeftX="349" topLeftY="281"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KzXbbB6C0opXSZxxBvwcNZvJnNg" width="46" height="77" topLeftX="780" topLeftY="408" alpha="0.7"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="LHgHbwvKUo3nWKxW65XccGhenSD" width="46" height="16" topLeftX="874" topLeftY="524"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="37" height="37" topLeftX="86" topLeftY="464" type="ellipse"> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="12" height="12" topLeftX="111" topLeftY="464" type="ellipse"> - <fill> - <fillColor color="rgba(141, 201, 236, 1)"/> - </fill> - </shape> - <shape width="407" height="63" topLeftX="349" topLeftY="353" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false"> - <p> - <span color="rgba(222, 224, 227, 1)">输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</span> - </p> - </content> - </shape> - <shape width="407" height="36" topLeftX="349" topLeftY="248" type="text"> - <content textType="title" fontSize="24" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span fontFamily="Arial">For Your Attention</span> - </p> - </content> - </shape> - <shape width="408" height="90" topLeftX="349" topLeftY="158" type="text"> - <content textType="title" fontSize="60" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span fontFamily="Arial">Thank You</span> - </p> - </content> - </shape> - <shape width="72" height="18" topLeftX="863" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <img src="SJrybASt7oIAmKxh6Xac4NYhnxh" width="28" height="28" topLeftX="826" topLeftY="35" rotation="90"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/office--work_summary_report.xml b/skills/lark-slides/assets/templates/office--work_summary_report.xml deleted file mode 100644 index 0042f9872..000000000 --- a/skills/lark-slides/assets/templates/office--work_summary_report.xml +++ /dev/null @@ -1,1523 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>工作总结报告 - - - - <headline fontColor="#000000FF" fontSize="36"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style/> - <data> - <img src="BA1QbwpWMo58RExmiiAcWEHhnOf" width="251" height="251" topLeftX="532" topLeftY="83" rotation="45" alpha="0.1"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="292" height="292" topLeftX="456" topLeftY="152" type="ellipse"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </shape> - <shape width="408" height="97" topLeftX="67" topLeftY="66" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="51">工作总结规划</span> - </strong> - </p> - </content> - </shape> - <shape width="262" height="56" topLeftX="67" topLeftY="147" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24">WORK SUMMARY</span> - </p> - </content> - </shape> - <shape width="216" height="45" topLeftX="72" topLeftY="364" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">报告人: 马克</span> - </strong> - </p> - </content> - </shape> - <shape width="225" height="44" topLeftX="67" topLeftY="413" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">汇报时间:2026.XX.XX</span> - </p> - </content> - </shape> - <shape width="8" height="60" topLeftX="57" topLeftY="84" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <img src="BsM1b7VS6o7egBxNroTcunE6njh" width="454" height="381" topLeftX="456" topLeftY="108"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="346" height="66" topLeftX="510" topLeftY="119" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="51" height="51" topLeftX="517" topLeftY="126" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="65" height="65" topLeftX="510" topLeftY="119" type="ellipse"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">01</span> - </strong> - </p> - </content> - </shape> - <shape width="346" height="66" topLeftX="510" topLeftY="198" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="51" height="51" topLeftX="517" topLeftY="205" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="65" height="65" topLeftX="510" topLeftY="198" type="ellipse"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">02</span> - </strong> - </p> - </content> - </shape> - <shape width="346" height="66" topLeftX="510" topLeftY="277" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="51" height="51" topLeftX="517" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="65" height="65" topLeftX="510" topLeftY="277" type="ellipse"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">03</span> - </strong> - </p> - </content> - </shape> - <shape width="346" height="66" topLeftX="510" topLeftY="356" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="51" height="51" topLeftX="517" topLeftY="363" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="65" height="65" topLeftX="510" topLeftY="356" type="ellipse"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">04</span> - </strong> - </p> - </content> - </shape> - <shape width="280" height="47" topLeftX="576" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <span fontSize="18">工作概述</span> - </p> - </content> - </shape> - <shape width="280" height="47" topLeftX="576" topLeftY="207" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <span fontSize="18">完成情况</span> - </p> - </content> - </shape> - <shape width="280" height="47" topLeftX="576" topLeftY="286" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <span fontSize="18">经验反思</span> - </p> - </content> - </shape> - <shape width="280" height="47" topLeftX="576" topLeftY="365" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18"> - <p> - <span fontSize="18">工作计划</span> - </p> - </content> - </shape> - <shape width="292" height="292" topLeftX="57" topLeftY="111" type="ellipse"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </shape> - <img src="PvU5bCCjCop7hCxDgYAc1G9jnxd" width="288" height="206" topLeftX="130" topLeftY="247"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="242" height="68" topLeftX="143" topLeftY="140" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">目录</span> - </strong> - </p> - </content> - </shape> - <shape width="232" height="68" topLeftX="218" topLeftY="140" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="32">CONTENTS</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="416" height="64" topLeftX="392" topLeftY="282" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">JOB OVERVIEW</span> - </p> - </content> - </shape> - <img src="Bs0GbbM4LoKrcPxZpSHc9h9dnLe" width="116" height="132" topLeftX="224" topLeftY="191"> - <crop type="rect" leftOffset="0.39" rightOffset="0.39" topOffset="0" bottomOffset="0"/> - </img> - <shape width="544" height="110" topLeftX="385" topLeftY="187" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="60">01 工作概述</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="56" topLeftX="174" topLeftY="64" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24" bold="false">WORK CONTENT</span> - </p> - </content> - </shape> - <shape width="118" height="56" topLeftX="70" topLeftY="64" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(58, 108, 234, 1)" bold="true"> - <p> - <strong> - <span color="rgba(58, 108, 234, 1)" fontSize="24">工作内容</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="69" topLeftY="345" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">项目进展问题</span> - </strong> - </p> - </content> - </shape> - <shape width="134" height="134" topLeftX="92" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="180" height="92" topLeftX="69" topLeftY="380" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="295" topLeftY="345" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">客户反馈我问题</span> - </strong> - </p> - </content> - </shape> - <shape width="134" height="134" topLeftX="318" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </shape> - <shape width="180" height="92" topLeftX="295" topLeftY="380" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(44, 40, 64, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="center" autoFit="shape-auto-fit"> - <p list="none" textAlign="center"> - <span color="rgba(44, 40, 64, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="520" topLeftY="345" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">公关处理问题</span> - </strong> - </p> - </content> - </shape> - <shape width="134" height="134" topLeftX="544" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="180" height="92" topLeftX="520" topLeftY="380" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(44, 40, 64, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="center" autoFit="shape-auto-fit"> - <p list="none" textAlign="center"> - <span color="rgba(44, 40, 64, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="746" topLeftY="345" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">工作业绩回顾</span> - </strong> - </p> - </content> - </shape> - <shape width="134" height="134" topLeftX="769" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="180" height="92" topLeftX="746" topLeftY="379" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="center"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <icon width="60" height="60" topLeftX="355" topLeftY="238" iconType="iconpark/Abstract/cylinder.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="580" topLeftY="238" iconType="iconpark/Abstract/game-emoji.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="806" topLeftY="238" iconType="iconpark/Abstract/oval-love-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="129" topLeftY="238" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="5" height="30" topLeftX="58" topLeftY="77" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="56" topLeftX="174" topLeftY="64" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(43, 47, 54, 1)" bold="false"> - <p>WORK CONTENT</p> - </content> - </shape> - <shape width="118" height="56" topLeftX="70" topLeftY="64" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(58, 108, 234, 1)" bold="true"> - <p>工作内容</p> - </content> - </shape> - <shape width="373" height="167" topLeftX="119" topLeftY="156" presetHandlers="16" alpha="0.85" type="round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="373" height="167" topLeftX="509" topLeftY="156" presetHandlers="16" alpha="0.85" type="round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="373" height="167" topLeftX="118" topLeftY="336" presetHandlers="16" alpha="0.85" type="round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="373" height="167" topLeftX="508" topLeftY="336" presetHandlers="16" alpha="0.85" type="round-rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="60" height="60" topLeftX="528" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">04</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="38" topLeftX="593" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">工作内容 #4</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="83" topLeftX="593" topLeftY="382" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="138" topLeftY="357" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">03</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="38" topLeftX="203" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">工作内容 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="83" topLeftX="203" topLeftY="382" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="529" topLeftY="176" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">02</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="38" topLeftX="594" topLeftY="171" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">工作内容 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="83" topLeftX="594" topLeftY="201" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="139" topLeftY="176" type="ellipse"> - <fill> - <fillColor color="rgba(14, 94, 253, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">0</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">1</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="38" topLeftX="205" topLeftY="171" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">工作内容 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="83" topLeftX="205" topLeftY="201" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="5" height="30" topLeftX="58" topLeftY="77" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="886" height="464" topLeftX="37" topLeftY="38" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <img src="J8gLbpIy4o8aiTxCutkc0feNnoc" width="183" height="149" topLeftX="708" topLeftY="76"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="256" height="68" topLeftX="85" topLeftY="88" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="32">工作总结</span> - </strong> - </p> - </content> - </shape> - <shape width="230" height="56" topLeftX="226" topLeftY="94" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24">SUMMARY</span> - </p> - </content> - </shape> - <shape width="225" height="44" topLeftX="85" topLeftY="241" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">内容总结详情</span> - </strong> - </p> - </content> - </shape> - <shape width="619" height="92" topLeftX="85" topLeftY="285" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具</span> - </p> - </content> - </shape> - <shape width="216" height="45" topLeftX="90" topLeftY="418" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">总结点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="216" height="45" topLeftX="357" topLeftY="418" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">总结点 #2</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="416" height="64" topLeftX="392" topLeftY="282" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">COMPLETION</span> - </p> - </content> - </shape> - <img src="LzSZbMIn1oU2yOxNT8ocDmyhndc" width="116" height="132" topLeftX="224" topLeftY="191"> - <crop type="rect" leftOffset="0.21" rightOffset="0.21" topOffset="0" bottomOffset="0"/> - </img> - <shape width="544" height="110" topLeftX="385" topLeftY="187" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="60">02 完成情况</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="57" topLeftX="154" topLeftY="44" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" fontFamily="undefined" color="rgba(43, 47, 54, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p list="none" textAlign="left"> - <span color="rgba(43, 47, 54, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="24" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">WORK PROGRESS</span> - </p> - </content> - </shape> - <shape width="118" height="56" topLeftX="50" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(58, 108, 234, 1)" bold="true"> - <p> - <strong> - <span color="rgba(58, 108, 234, 1)" fontSize="24">工作进度</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="38" topLeftX="40" topLeftY="145" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">工作内容 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="279" height="62" topLeftX="40" topLeftY="175" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="45" topLeftY="239" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="226" height="20" topLeftX="49" topLeftY="243" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(14, 94, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="38" topLeftX="424" topLeftY="234" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(14, 94, 253, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(14, 94, 253, 1)" fontSize="18">67%</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="38" topLeftX="40" topLeftY="318" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">工作内容 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="279" height="62" topLeftX="40" topLeftY="348" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="374" height="27" topLeftX="45" topLeftY="412" presetHandlers="4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="226" height="20" topLeftX="49" topLeftY="416" presetHandlers="2" type="rect"> - <fill> - <fillColor color="rgba(14, 94, 253, 1)"/> - </fill> - </shape> - <shape width="65" height="38" topLeftX="424" topLeftY="407" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(14, 94, 253, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(14, 94, 253, 1)" fontSize="18">67%</span> - </strong> - </p> - </content> - </shape> - <img src="HzRFb9Spso7U0Qx5aa3cZLPenDr" width="381" height="381" topLeftX="579" topLeftY="155"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="5" height="30" topLeftX="45" topLeftY="57" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="56" topLeftX="154" topLeftY="44" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(43, 47, 54, 1)" bold="false"> - <p>WORK PROGRESS</p> - </content> - </shape> - <shape width="118" height="56" topLeftX="50" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(58, 108, 234, 1)" bold="true"> - <p>工作进度</p> - </content> - </shape> - <shape width="210" height="264" topLeftX="697" topLeftY="181" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="210" height="264" topLeftX="482" topLeftY="181" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="210" height="264" topLeftX="268" topLeftY="181" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="210" height="264" topLeftX="54" topLeftY="181" presetHandlers="18" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="180" height="44" topLeftX="707" topLeftY="310" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">项目内容 #4</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="92" topLeftX="707" topLeftY="344" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="712" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="732" topLeftY="221" iconType="iconpark/Abstract/oval-love-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="44" topLeftX="493" topLeftY="311" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">项目内容 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="92" topLeftX="493" topLeftY="345" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="498" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="517" topLeftY="221" iconType="iconpark/Abstract/game-emoji.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="44" topLeftX="278" topLeftY="311" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">项目内容 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="92" topLeftX="278" topLeftY="345" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="283" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="303" topLeftY="221" iconType="iconpark/Abstract/cylinder.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="44" topLeftX="64" topLeftY="311" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="16">项目内容 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="92" topLeftX="64" topLeftY="345" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="69" topLeftY="201" type="ellipse"> - <fill> - <fillColor color="rgba(14, 94, 253, 1)"/> - </fill> - </shape> - <icon width="32" height="32" topLeftX="89" topLeftY="221" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="99" height="68" topLeftX="151" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(14, 94, 253, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(14, 94, 253, 1)" fontSize="32">60%</span> - </strong> - </p> - </content> - </shape> - <shape width="99" height="68" topLeftX="365" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="32">30%</span> - </strong> - </p> - </content> - </shape> - <shape width="99" height="68" topLeftX="579" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="32">80%</span> - </strong> - </p> - </content> - </shape> - <shape width="99" height="68" topLeftX="793" topLeftY="202" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(44, 40, 64, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(44, 40, 64, 1)" fontSize="32">60%</span> - </strong> - </p> - </content> - </shape> - <shape width="5" height="30" topLeftX="45" topLeftY="57" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="886" height="464" topLeftX="37" topLeftY="38" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="256" height="68" topLeftX="85" topLeftY="88" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="32">工作进度</span> - </strong> - </p> - </content> - </shape> - <shape width="230" height="56" topLeftX="226" topLeftY="94" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24">WORK PROGRESS</span> - </p> - </content> - </shape> - <img src="Ip5mbB0MUoJhTFxVsmEcrEnjnrd" width="259" height="199" topLeftX="361" topLeftY="190"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="242" height="44" topLeftX="95" topLeftY="227" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" textAlign="right"> - <p> - <strong> - <span fontSize="16">工作态度和敬业方面</span> - </strong> - </p> - </content> - </shape> - <shape width="242" height="92" topLeftX="95" topLeftY="261" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="225" height="44" topLeftX="630" topLeftY="227" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作质量,绩效和贡献</span> - </strong> - </p> - </content> - </shape> - <shape width="242" height="92" topLeftX="630" topLeftY="261" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。</span> - </p> - </content> - </shape> - <shape width="216" height="45" topLeftX="110" topLeftY="373" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">XX 项目</span> - </strong> - </p> - </content> - </shape> - <shape width="216" height="45" topLeftX="635" topLeftY="159" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">XX 项目</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="416" height="64" topLeftX="392" topLeftY="282" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">EXPERIENCE REFLECTION</span> - </p> - </content> - </shape> - <img src="Latfb65aEorji9xRzgFcuS3un3g" width="116" height="132" topLeftX="224" topLeftY="191"> - <crop type="rect" leftOffset="0.22" rightOffset="0.22" topOffset="0" bottomOffset="0"/> - </img> - <shape width="544" height="110" topLeftX="385" topLeftY="187" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="60">03 经验反思</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="56" topLeftX="154" topLeftY="44" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24" bold="false">EXPERIENCE REFLECTION</span> - </p> - </content> - </shape> - <shape width="118" height="56" topLeftX="50" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(58, 108, 234, 1)" bold="true"> - <p> - <strong> - <span color="rgba(58, 108, 234, 1)" fontSize="24">经验反思</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - <img src="ZrQrbKVo4oQAijxeFqIcZ4Xhnnd" width="271" height="271" topLeftX="623" topLeftY="234" flipX="true"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="5" height="30" topLeftX="45" topLeftY="57" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="416" height="64" topLeftX="392" topLeftY="282" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">WORK PLAN</span> - </p> - </content> - </shape> - <img src="ECiab3ZDpomRJaxjYTBcpxWpnDf" width="116" height="132" topLeftX="224" topLeftY="191"> - <crop type="rect" leftOffset="0.39" rightOffset="0.39" topOffset="0" bottomOffset="0"/> - </img> - <shape width="544" height="110" topLeftX="385" topLeftY="187" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="60">04 工作计划</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="302" height="56" topLeftX="154" topLeftY="44" alpha="0.5" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24" bold="false">WORK PLAN</span> - </p> - </content> - </shape> - <shape width="118" height="56" topLeftX="50" topLeftY="44" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(58, 108, 234, 1)" bold="true"> - <p> - <strong> - <span color="rgba(58, 108, 234, 1)" fontSize="24">工作计划</span> - </strong> - </p> - </content> - </shape> - <img src="RY2XbimMGowUaix1Op4c45plnkf" width="202" height="331" topLeftX="376" topLeftY="138"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="161" height="38" topLeftX="186" topLeftY="150" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="18">完善招聘流程</span> - </strong> - </p> - </content> - </shape> - <shape width="288" height="62" topLeftX="59" topLeftY="180" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="right"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="186" topLeftY="382" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">完善培训体系</span> - </strong> - </p> - </content> - </shape> - <shape width="288" height="62" topLeftX="59" topLeftY="412" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="right"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="186" topLeftY="266" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">优化绩效方法</span> - </strong> - </p> - </content> - </shape> - <shape width="288" height="62" topLeftX="59" topLeftY="296" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="right"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="366" topLeftY="155" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">03</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="366" topLeftY="271" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">02</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="366" topLeftY="387" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">01</span> - </strong> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="607" topLeftY="150" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="18">加强行政管理</span> - </strong> - </p> - </content> - </shape> - <shape width="288" height="62" topLeftX="607" topLeftY="180" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="607" topLeftY="382" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">加强培训</span> - </strong> - </p> - </content> - </shape> - <shape width="288" height="62" topLeftX="607" topLeftY="412" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="607" topLeftY="266" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">拓宽招聘渠道</span> - </strong> - </p> - </content> - </shape> - <shape width="288" height="62" topLeftX="607" topLeftY="296" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="530" topLeftY="155" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">06</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="530" topLeftY="271" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">05</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="530" topLeftY="387" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">04</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - </style> - <data> - <shape width="886" height="464" topLeftX="37" topLeftY="38" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="256" height="68" topLeftX="352" topLeftY="51" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="32">工作计划</span> - </strong> - </p> - </content> - </shape> - <shape width="840" height="335" topLeftX="60" topLeftY="129" presetHandlers="0" alpha="0.4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="382" startY="465" endX="381" endY="174" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="468" startY="465" endX="468" endY="174" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="554" startY="465" endX="553" endY="129" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="641" startY="465" endX="641" endY="174" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="727" startY="465" endX="727" endY="174" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="900" startY="465" endX="900" endY="174" alpha="0.2"> - <border lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="814" startY="465" endX="813" endY="174" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="295" startY="465" endX="295" endY="174" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="207" startY="465" endX="206" endY="129" alpha="0.2"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="840" height="45" topLeftX="60" topLeftY="129" presetHandlers="0" alpha="0.4" type="rect"> - <fill> - <fillColor color="rgba(244, 245, 246, 1)"/> - </fill> - <border color="rgba(43, 47, 54, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="87" height="47" topLeftX="338" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">Q1</span> - </strong> - </p> - </content> - </shape> - <shape width="87" height="47" topLeftX="684" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">Q2</span> - </strong> - </p> - </content> - </shape> - <shape width="139" height="47" topLeftX="60" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">事项规划</span> - </strong> - </p> - </content> - </shape> - <shape width="139" height="41" topLeftX="60" topLeftY="185" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">事项 #1</span> - </p> - </content> - </shape> - <shape width="139" height="41" topLeftX="60" topLeftY="241" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">事项 #2</span> - </p> - </content> - </shape> - <shape width="139" height="41" topLeftX="60" topLeftY="297" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">事项 #3</span> - </p> - </content> - </shape> - <shape width="139" height="41" topLeftX="60" topLeftY="353" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">事项 #4</span> - </p> - </content> - </shape> - <shape width="139" height="41" topLeftX="60" topLeftY="409" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">事项 #5</span> - </p> - </content> - </shape> - <shape width="176" height="45" topLeftX="216" topLeftY="183" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3/1 - 3/3</span> - </p> - </content> - </shape> - <shape width="174" height="45" topLeftX="305" topLeftY="239" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3/1 - 3/8</span> - </p> - </content> - </shape> - <shape width="173" height="45" topLeftX="477" topLeftY="295" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3/12</span> - </p> - </content> - </shape> - <shape width="260" height="45" topLeftX="564" topLeftY="409" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3/10 - 3/24</span> - </p> - </content> - </shape> - <shape width="173" height="45" topLeftX="391" topLeftY="352" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3/8 - 3/10</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="408" height="97" topLeftX="276" topLeftY="155" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="51">感谢观看</span> - </strong> - </p> - </content> - </shape> - <shape width="262" height="56" topLeftX="349" topLeftY="227" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="center"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="24">THANKS</span> - </p> - </content> - </shape> - <shape width="216" height="45" topLeftX="368" topLeftY="293" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(58, 108, 234, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">报告人: 马克</span> - </strong> - </p> - </content> - </shape> - <shape width="225" height="44" topLeftX="368" topLeftY="347" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span fontSize="16">汇报时间:2026.XX.XX</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/operations--brand_logo_design.xml b/skills/lark-slides/assets/templates/operations--brand_logo_design.xml deleted file mode 100644 index a34b705c5..000000000 --- a/skills/lark-slides/assets/templates/operations--brand_logo_design.xml +++ /dev/null @@ -1,1347 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>品牌标志设计 - - - - <headline/> - <sub-headline/> - <body fontColor="#000000FF"/> - <caption fontColor="rgba(155, 157, 160, 1)" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="Nz5gb0JwQoKtbWxj6vScCVdlnDg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="206" height="62" topLeftX="60" topLeftY="413" type="slides-full-round-rect"> - <border color="rgba(0, 0, 0, 1)" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="124" height="41" topLeftX="82" topLeftY="424" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="14">April XX, 2026</span> - </strong> - </p> - </content> - </shape> - <line startX="215" startY="445" endX="245" endY="445"> - <border lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="arrow"/> - </line> - <shape width="157" height="42" topLeftX="60" topLeftY="170" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(203, 205, 208, 1)"> - <p letterSpacing="1"> - <span color="rgba(203, 205, 208, 1)">XX 品牌</span> - </p> - </content> - </shape> - <shape width="454" height="110" topLeftX="46" topLeftY="211" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="60" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="60">品牌标志设计</span> - </strong> - </p> - </content> - </shape> - <shape width="132" height="41" topLeftX="85" topLeftY="54" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="false"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="14" bold="false">YOUR LOGO</span> - </p> - </content> - </shape> - <img src="DD33b3w3XovpT9xFZpqco0TynEe" width="12" height="25" topLeftX="60" topLeftY="62" alpha="0.9"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="DD33b3w3XovpT9xFZpqco0TynEe" width="12" height="25" topLeftX="74" topLeftY="62" alpha="0.9"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="124" height="38" topLeftX="787" topLeftY="57" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(0, 0, 0, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12" bold="false">YOUR TEAM</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </style> - <data> - <img src="DYM4b6dzCoMD5gx4sn4cdPYlnxg" width="312" height="402" topLeftX="0" topLeftY="0" rotation="180"> - <crop type="rect" leftOffset="0" rightOffset="86" topOffset="0" bottomOffset="186" presetHandlers="0"/> - </img> - <img src="ILOUbaURToeRBCx5VxicLMsKnsb" width="432" height="203" topLeftX="528" topLeftY="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="K8w1bqqEzoTR1bxSqC2cZaQKnmM" width="216" height="337" topLeftX="744" topLeftY="203"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="95" presetHandlers="0"/> - </img> - <shape width="357" height="44" topLeftX="471" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">品牌标志方案二</span> - </p> - </content> - </shape> - <shape width="357" height="44" topLeftX="471" topLeftY="308" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">品牌标志方案一</span> - </p> - </content> - </shape> - <shape width="357" height="44" topLeftX="471" topLeftY="246" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">设计目标</span> - </p> - </content> - </shape> - <shape width="357" height="44" topLeftX="471" topLeftY="181" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="16">品牌背景</span> - </p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="365" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>04</p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="302" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>03</p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="240" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>02</p> - </content> - </shape> - <shape width="57" height="56" topLeftX="414" topLeftY="175" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p>01</p> - </content> - </shape> - <shape width="355" height="83" topLeftX="47" topLeftY="163" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="42">目录</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(251, 251, 251, 1)"/> - </fill> - </style> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="linear-gradient(306deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 26%,rgba(230, 241, 255, 0.1) 63%,rgba(8, 120, 255, 0.11) 100%)"/> - </fill> - </shape> - <img src="CfGzbrtZQogLbGxoQ6NcBVgTnud" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="311" height="291" topLeftX="-10" topLeftY="239" rotation="270" alpha="0.4" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(19, 123, 255, 0) 0%,rgba(173, 230, 253, 0.4) 100%)"/> - </fill> - </shape> - <img src="FW7dbP5C1ol5nXxuNxEcNewknTd" width="210" height="295" topLeftX="250" topLeftY="-43" rotation="90" alpha="0.12"> - <crop type="rect" leftOffset="50" rightOffset="0" topOffset="0" bottomOffset="87" presetHandlers="0"/> - </img> - <img src="I8dFbBRi4o5BJCx4XgycfspKnxI" width="362" height="540" topLeftX="0" topLeftY="0" exposure="12" contrast="-11" saturation="22" temperature="-82"> - <crop type="rect" leftOffset="13" rightOffset="31" topOffset="7" bottomOffset="62" presetHandlers="0"/> - </img> - <shape width="106" height="106" topLeftX="302" topLeftY="105" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="64" height="64" topLeftX="322" topLeftY="126" iconType="iconpark/Abstract/graphic-stitching.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="235" height="77" topLeftX="451" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">品牌背景</span> - </p> - </content> - </shape> - <shape width="332" height="44" topLeftX="453" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">背景一</span> - </strong> - </p> - </content> - </shape> - <shape width="332" height="62" topLeftX="453" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(155, 157, 160, 1)" textAlign="left"> - <p> - <span color="rgba(155, 157, 160, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="332" height="44" topLeftX="453" topLeftY="313" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">背景二</span> - </strong> - </p> - </content> - </shape> - <shape width="332" height="62" topLeftX="453" topLeftY="343" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(155, 157, 160, 1)" textAlign="left"> - <p> - <span color="rgba(155, 157, 160, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(251, 251, 251, 1)"/> - </fill> - </style> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <img src="PT8Vb5020oH4AjxP0hacPvwDnhq" width="540" height="960" topLeftX="455" topLeftY="510" rotation="270" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="249" height="77" topLeftX="47" topLeftY="150" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">设计目标</span> - </p> - </content> - </shape> - <shape width="244" height="83" topLeftX="52" topLeftY="227" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="236" height="44" topLeftX="683" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标二</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="684" topLeftY="207" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="683" topLeftY="91" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="702" topLeftY="110" iconType="iconpark/Charts/chart-proportion.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="236" height="44" topLeftX="683" topLeftY="401" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标四</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="684" topLeftY="434" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="683" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(16, 117, 239, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="702" topLeftY="337" iconType="iconpark/Abstract/triangular-pyramid.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="236" height="44" topLeftX="396" topLeftY="401" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标三</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="397" topLeftY="434" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="396" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="415" topLeftY="337" iconType="iconpark/Operate/color-filter.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <line startX="653" startY="91" endX="653" endY="502"> - <border color="rgba(203, 205, 208, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="370" startY="292" endX="905" endY="292"> - <border color="rgba(203, 205, 208, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="236" height="44" topLeftX="396" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">目标一</span> - </strong> - </p> - </content> - </shape> - <shape width="236" height="74" topLeftX="397" topLeftY="207" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)"> - <p> - <span color="rgba(121, 124, 129, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="396" topLeftY="91" type="ellipse"> - <fill> - <fillColor color="rgba(16, 117, 239, 1)"/> - </fill> - </shape> - <icon width="40" height="40" topLeftX="415" topLeftY="110" iconType="iconpark/Base/system.svg"> - <border color="linear-gradient(141deg,rgba(243, 249, 255, 1) 0%,rgba(244, 248, 253, 1) 27%,rgba(245, 246, 246, 1) 100%)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="BsaXbZFhXosMIaxe1q3cwVGinxh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="318" startY="298" endX="642" endY="298"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="879" height="41" topLeftX="40" topLeftY="308" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(78, 86, 102, 1)" textAlign="center"> - <p letterSpacing="1"> - <span color="rgba(78, 86, 102, 1)" fontSize="14">副标题信息</span> - </p> - </content> - </shape> - <shape width="879" height="83" topLeftX="40" topLeftY="210" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="42">品牌标志方案一</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="U9PNbCv3Loi5WNxYxvjclLXmn3e" width="241" height="540" topLeftX="-2" topLeftY="0" flipY="true" exposure="18" contrast="-7" saturation="14" temperature="-69"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="-2" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="21" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="-2" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="21" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="31" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="21" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="GRNXbSx7OoO9Lhx1YEBctcvunKc" width="241" height="540" topLeftX="480" topLeftY="0" rotation="180" exposure="9" temperature="-42"> - <crop type="rect" leftOffset="150" rightOffset="150" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="480" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="503" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="480" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="503" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="513" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="503" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="Jys9bL5AYoTbL7xxuGFcddJvnzz" width="241" height="540" topLeftX="719" topLeftY="0" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="719" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="742" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="719" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="742" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="751" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="742" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="HNMDbk5Afo4U9cx6RFec78s4npm" width="241" height="540" topLeftX="239" topLeftY="0" exposure="20" contrast="5" saturation="11" temperature="-20"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="194" height="56" topLeftX="263" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="195" height="56" topLeftX="262" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="105" topLeftX="239" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="194" height="56" topLeftX="263" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="239" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="262" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="271" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="262" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <shape width="192" height="44" topLeftX="852" topLeftY="717" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="480" height="540" topLeftX="480" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" type="ellipse"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="639" topLeftY="189" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="551" startY="270" endX="889" endY="270"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="720" startY="127" endX="720" endY="413"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="183" height="183" topLeftX="629" topLeftY="179" iconType="iconpark/Abstract/two-ellipses.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(251, 251, 251, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="480" height="540" topLeftX="0" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" type="ellipse"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="158" topLeftY="191" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="70" startY="271" endX="408" endY="271"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="239" startY="128" endX="239" endY="414"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="182" height="182" topLeftX="148" topLeftY="180" iconType="iconpark/Abstract/two-ellipses.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="389" height="56" topLeftX="522" topLeftY="445" rotation="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="389" height="53" topLeftX="45" topLeftY="445" rotation="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(243, 244, 246, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="22">设计方案一</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="V4dIb4GvwoHVZ3xEqMmcvcMfnPc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="303" height="83" topLeftX="52" topLeftY="229" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(251, 251, 251, 1)" textAlign="left"> - <p> - <span color="rgba(251, 251, 251, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="864" height="62" topLeftX="47" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="296" height="263" topLeftX="47" topLeftY="125" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="160" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="160" fontFamily="Arial Black" bold="false">Aa</span> - </p> - </content> - </shape> - <shape width="492" height="51" topLeftX="415" topLeftY="192" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black" bold="false">Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn</span> - </p> - </content> - </shape> - <shape width="492" height="51" topLeftX="415" topLeftY="239" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black" bold="false">1234567890</span> - </p> - </content> - </shape> - <shape width="492" height="51" topLeftX="415" topLeftY="286" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Arial Black" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black">(<!</span> - </strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Arial Black" bold="false">#$&?]}</span> - </p> - </content> - </shape> - <line startX="355" startY="191" endX="355" endY="338"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="146" height="146" topLeftX="717" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(134, 219, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">25%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#86DBFF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="717" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(198, 231, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="28">5%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#C6E7FF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" color="rgba(251, 251, 251, 1)" bold="true"> - <p> - <strong> - <span color="rgba(251, 251, 251, 1)" fontSize="30">60%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#1C66F6</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">10%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#000000</span> - </strong> - </p> - </content> - </shape> - <shape width="249" height="77" topLeftX="47" topLeftY="150" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">色彩方案</span> - </p> - </content> - </shape> - <shape width="360" height="104" topLeftX="52" topLeftY="227" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="W9b6bRk6xoEMZJxK9SicuaaLnKp" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="318" startY="298" endX="642" endY="298"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="879" height="41" topLeftX="40" topLeftY="308" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(78, 86, 102, 1)" textAlign="center"> - <p letterSpacing="1"> - <span color="rgba(78, 86, 102, 1)" fontSize="14">副标题信息</span> - </p> - </content> - </shape> - <shape width="879" height="83" topLeftX="40" topLeftY="210" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="42" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="42">品牌标志方案二</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="KXVybTHCGoY3Gjxsnb5clEdbnud" width="241" height="540" topLeftX="0" topLeftY="0" exposure="18" temperature="-100"> - <crop type="rect" leftOffset="15" rightOffset="26" topOffset="23" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="0" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="23" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="0" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="23" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="33" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="23" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="AyzzbZ5KUoncRaxxMwecWRHAnOd" width="241" height="540" topLeftX="480" topLeftY="0" exposure="-7" contrast="-12" saturation="15" temperature="-16"> - <crop type="rect" leftOffset="15" rightOffset="14" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="480" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="503" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="480" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(255, 255, 255, 0.8) 0%,rgba(255, 255, 255, 0.4) 59%,rgba(255, 255, 255, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="503" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(0, 0, 0, 1)" bold="true"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="513" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="503" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(0, 0, 0, 1)"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="EiPVblC7pomjKlxdqo1cXl89nBg" width="241" height="540" topLeftX="239" topLeftY="0" rotation="180" flipX="true" flipY="true" saturation="-22"> - <crop type="rect" leftOffset="31" rightOffset="31" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="194" height="56" topLeftX="262" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="195" height="56" topLeftX="262" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="105" topLeftX="239" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="194" height="56" topLeftX="263" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="239" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="262" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="271" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="262" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - <img src="G3sIb7p4Qounv7xEwkMcuqfRnid" width="241" height="540" topLeftX="719" topLeftY="0" rotation="180" exposure="38" contrast="-8" saturation="9" temperature="-80"> - <crop type="rect" leftOffset="31" rightOffset="31" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="241" height="105" topLeftX="719" topLeftY="435" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="195" height="56" topLeftX="742" topLeftY="459" alpha="0.9" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。</span> - </p> - </content> - </shape> - <shape width="241" height="248" topLeftX="719" topLeftY="0" alpha="0.5" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(0, 0, 0, 0.8) 0%,rgba(0, 0, 0, 0.4) 59%,rgba(0, 0, 0, 0) 100%)"/> - </fill> - </shape> - <shape width="195" height="59" topLeftX="742" topLeftY="78" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="26">风格语言</span> - </p> - </content> - </shape> - <shape width="42" height="6" topLeftX="751" topLeftY="66" type="rect"> - <fill> - <fillColor color="rgba(243, 244, 246, 1)"/> - </fill> - </shape> - <shape width="195" height="38" topLeftX="742" topLeftY="128" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.949)"> - <p> - <span color="rgba(255, 255, 255, 0.949)" fontSize="12">演示文稿是一种实用的工具。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="480" height="540" topLeftX="480" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(28, 102, 246, 1)"/> - </fill> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" type="ellipse"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="218" height="218" topLeftX="611" topLeftY="161" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="639" topLeftY="189" presetHandlers="16" type="round-rect"> - <border color="rgba(143, 156, 180, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="551" startY="270" endX="889" endY="270"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="720" startY="127" endX="720" endY="413"> - <border color="rgba(203, 205, 208, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="183" height="183" topLeftX="629" topLeftY="179" iconType="iconpark/Abstract/api-app.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(251, 251, 251, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="480" height="540" topLeftX="0" topLeftY="0" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" type="ellipse"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="217" height="217" topLeftX="130" topLeftY="163" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="161" topLeftX="158" topLeftY="191" presetHandlers="16" type="round-rect"> - <border color="rgba(62, 63, 65, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="70" startY="271" endX="408" endY="271"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="239" startY="128" endX="239" endY="414"> - <border color="rgba(129, 132, 135, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="182" height="182" topLeftX="148" topLeftY="180" iconType="iconpark/Abstract/api-app.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="9" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="389" height="56" topLeftX="522" topLeftY="445" rotation="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(243, 244, 246, 1)" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="12">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。</span> - </p> - </content> - </shape> - <shape width="389" height="53" topLeftX="45" topLeftY="445" rotation="360" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" color="rgba(243, 244, 246, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(243, 244, 246, 1)" fontSize="22">设计方案二</span> - </p> - </content> - </shape> - <shape width="132" height="41" topLeftX="85" topLeftY="54" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14" bold="false">YOUR LOGO</span> - </p> - </content> - </shape> - <img src="KQ6ubZ4VJoHxRSxjPGecHsdHnNb" width="12" height="25" topLeftX="60" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Zte9b4vHRo6CjpxVGRvceHwtnWf" width="12" height="25" topLeftX="74" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="124" height="38" topLeftX="787" topLeftY="57" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(251, 251, 251, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(251, 251, 251, 1)" fontSize="12" bold="false">YOUR TEAM</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="864" height="62" topLeftX="47" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - <shape width="296" height="263" topLeftX="47" topLeftY="125" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="160" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <span color="rgba(43, 47, 54, 1)" fontSize="160" fontFamily="Trebuchet MS" bold="false">Aa</span> - </p> - </content> - </shape> - <shape width="407" height="51" topLeftX="506" topLeftY="192" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS" bold="false">Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn</span> - </p> - </content> - </shape> - <shape width="407" height="51" topLeftX="506" topLeftY="239" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS" bold="false">1234567890</span> - </p> - </content> - </shape> - <shape width="407" height="51" topLeftX="506" topLeftY="286" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" fontFamily="Trebuchet MS" color="rgba(43, 47, 54, 1)" bold="false" letterSpacing="8"> - <p letterSpacing="8"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS">(<!</span> - </strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20" fontFamily="Trebuchet MS" bold="false">#$&?]}</span> - </p> - </content> - </shape> - <line startX="374" startY="197" endX="374" endY="343"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="V3PFbTK7oo0k82x2N1Rcu5x0nBc" width="344" height="412" topLeftX="0" topLeftY="0" alpha="0.15"> - <crop type="rect" leftOffset="81" rightOffset="0" topOffset="172" bottomOffset="43" presetHandlers="0"/> - </img> - <img src="X9O3bMXTQoPTsSxLF9XciJtwnAf" width="219" height="219" topLeftX="741" topLeftY="321" alpha="0.25"> - <crop type="rect" leftOffset="63" rightOffset="149" topOffset="38" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="146" height="146" topLeftX="717" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(41, 185, 246, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">25%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#86DBFF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="717" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(225, 234, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="28">5%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="717" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#C6E7FF</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="103" type="ellipse"> - <fill> - <fillColor color="rgba(0, 145, 227, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30" color="rgba(251, 251, 251, 1)" bold="true"> - <p> - <strong> - <span color="rgba(251, 251, 251, 1)" fontSize="30">60%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="249" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#1C66F6</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="509" topLeftY="314" type="ellipse"> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 0.949)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 0.949)" fontSize="28">10%</span> - </strong> - </p> - </content> - </shape> - <shape width="146" height="44" topLeftX="509" topLeftY="460" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">#000000</span> - </strong> - </p> - </content> - </shape> - <shape width="360" height="77" topLeftX="47" topLeftY="150" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="38">色彩方案</span> - </p> - </content> - </shape> - <shape width="360" height="104" topLeftX="52" topLeftY="227" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(121, 124, 129, 1)" textAlign="left"> - <p> - <span color="rgba(121, 124, 129, 1)">演示文稿是一种实用的工具,可以是演示,演讲,报告等。大部分时间,它们都是在为观众服务。它们有多种用途,是演讲和教学的有力工具。如果您想在演示文稿中展现内容,可以选择多种可以选择多种方式。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WsnNbo3j8oXqnWxynaZcVz6knrd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="132" height="41" topLeftX="85" topLeftY="54" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="false"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14" bold="false">YOUR LOGO</span> - </p> - </content> - </shape> - <img src="CCJxbunFoosXKRxZiSwcrHKNnXe" width="12" height="25" topLeftX="60" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Um3Qb2dr1of3Swxw73Ec5hGlnyb" width="12" height="25" topLeftX="74" topLeftY="62"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="124" height="38" topLeftX="787" topLeftY="57" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(251, 251, 251, 1)" bold="false" textAlign="right"> - <p> - <span color="rgba(251, 251, 251, 1)" fontSize="12" bold="false">YOUR TEAM</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/operations--brand_operations_plan.xml b/skills/lark-slides/assets/templates/operations--brand_operations_plan.xml deleted file mode 100644 index 57e8cf3e1..000000000 --- a/skills/lark-slides/assets/templates/operations--brand_operations_plan.xml +++ /dev/null @@ -1,1309 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>品牌运营计划-裂图重新上传 - - - - <headline fontColor="rgba(43, 47, 54, 1)" fontSize="48"/> - <sub-headline fontColor="rgba(43, 47, 54, 1)"/> - <body fontColor="rgba(43, 47, 54, 1)" fontSize="14"/> - <caption fontColor="rgba(43, 47, 54, 1)"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <shape width="542" height="116" topLeftX="26" topLeftY="375" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">品牌提案</span> - </p> - </content> - </shape> - <shape width="464" height="62" topLeftX="33" topLeftY="326" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">Brand proposal</span> - </p> - </content> - </shape> - <img src="XLyZb9phHo2eqMxA4TFcsriAnYg" width="459" height="464" topLeftX="501" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="22" topOffset="160" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="73" height="38" topLeftX="59" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="40" topLeftY="31" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </style> - <data> - <shape width="175" height="92" topLeftX="54" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)">目录</span> - </p> - </content> - </shape> - <shape width="175" height="68" topLeftX="60" topLeftY="165" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(43, 47, 54, 1)" bold="false"> - <p> - <span color="rgba(43, 47, 54, 1)">Contents</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="113" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(60, 111, 229, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 111, 229, 1)" fontSize="20">01</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="113" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(60, 111, 229, 1)" bold="true"> - <p> - <strong> - <span color="rgba(60, 111, 229, 1)" fontSize="20">品牌介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="170" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">02</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="170" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">产品介绍</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">03</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="226" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">市场分析</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="282" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">04</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="282" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">活动思路</span> - </p> - </content> - </shape> - <shape width="59" height="50" topLeftX="484" topLeftY="338" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="20">05</span> - </strong> - </p> - </content> - </shape> - <shape width="175" height="50" topLeftX="551" topLeftY="338" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="20">营销推广</span> - </p> - </content> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="123" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="179" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="235" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="291" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="5" height="32" topLeftX="468" topLeftY="347" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="163" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">01</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="31">品牌介绍</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Brand Story</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="225" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p> - <span color="rgba(60, 111, 229, 1)">品牌故事</span> - </p> - </content> - </shape> - <img src="Ob67bcca3obkWzxh5LtcdaEYnQh" width="248" height="361" topLeftX="350" topLeftY="89"> - <crop type="rect" leftOffset="0" rightOffset="347" topOffset="127" bottomOffset="107" presetHandlers="0"/> - </img> - <img src="GsGwbhbE0oRA2pxH46BcHtBZnOp" width="225" height="361" topLeftX="610" topLeftY="89"> - <crop type="rect" leftOffset="270" rightOffset="100" topOffset="128" bottomOffset="106" presetHandlers="0"/> - </img> - <img src="GYwAbOu11ofIfYxkiSlcX00bnvl" width="93" height="361" topLeftX="848" topLeftY="89"> - <crop type="rect" leftOffset="502" rightOffset="0" topOffset="128" bottomOffset="105" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Milestone</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="246" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>发展回顾</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="164" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">02</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>产品介绍</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Product Line</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="246" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>产品线</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="248" height="371" topLeftX="619" topLeftY="78" type="rect"> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="248" height="371" topLeftX="351" topLeftY="79" type="rect"> - <border color="rgba(222, 224, 227, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Highlights</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="246" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>产品亮点</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="644" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">亮点 </span> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">#2</span> - </strong> - </p> - </content> - </shape> - <shape width="180" height="92" topLeftX="644" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="649" topLeftY="115" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="33" height="33" topLeftX="669" topLeftY="135" iconType="iconpark/Abstract/cylinder.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="180" height="41" topLeftX="370" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">亮点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="92" topLeftX="370" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="375" topLeftY="115" type="ellipse"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <icon width="32" height="32" topLeftX="395" topLeftY="135" iconType="iconpark/Abstract/six-points.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="205" height="74" topLeftX="370" topLeftY="332" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" textAlign="left"> - <ul> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="205" height="74" topLeftX="644" topLeftY="332" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" textAlign="left"> - <ul> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - <li> - <p> - <span fontSize="12">要点描述</span> - </p> - </li> - </ul> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="163" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">03</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>市场分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Market Environment</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>市场环境</p> - </content> - </shape> - <shape width="310" height="310" topLeftX="334" topLeftY="110" type="ellipse"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="310" height="310" topLeftX="605" topLeftY="111" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="180" height="44" topLeftX="387" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">国内市场</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="92" topLeftX="387" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="44" topLeftX="657" topLeftY="205" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">国际市场</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="92" topLeftX="657" topLeftY="240" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Consumer Group</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>消费人群</p> - </content> - </shape> - <shape width="79" height="32" topLeftX="415" topLeftY="257" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">18</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="32" topLeftX="415" topLeftY="289" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">18-25</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="32" topLeftX="414" topLeftY="321" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">25-35</span> - </strong> - </p> - </content> - </shape> - <shape width="79" height="32" topLeftX="414" topLeftY="351" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1" textAlign="right"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="12">35 以上</span> - </strong> - </p> - </content> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="267" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="188" height="12" topLeftX="513" topLeftY="267" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="299" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="92" height="12" topLeftX="513" topLeftY="299" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="331" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="256" height="12" topLeftX="513" topLeftY="331" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="307" height="12" topLeftX="513" topLeftY="361" presetHandlers="0" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="188" height="12" topLeftX="513" topLeftY="361" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </shape> - <shape width="38" height="32" topLeftX="513" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">0</span> - </p> - </content> - </shape> - <shape width="38" height="32" topLeftX="603" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">10</span> - </p> - </content> - </shape> - <shape width="38" height="32" topLeftX="693" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">20</span> - </p> - </content> - </shape> - <shape width="38" height="32" topLeftX="782" topLeftY="381" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 1)" bold="false" lineSpacing="multiple:1" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(43, 47, 54, 1)" fontSize="12" bold="false">30</span> - </p> - </content> - </shape> - <shape width="386" height="74" topLeftX="448" topLeftY="141" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="448" topLeftY="107" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <span color="rgba(43, 47, 54, 1)">洞察分析</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p>Competition Analysis</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="269" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>竞对分析</p> - </content> - </shape> - <shape width="146" height="146" topLeftX="559" topLeftY="79" type="ellipse"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="20">竞品 #1</span> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="559" topLeftY="194" type="ellipse"> - <fill> - <fillColor/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20"> - <p> - <span fontSize="20">竞品 #2</span> - </p> - </content> - </shape> - <shape width="146" height="146" topLeftX="559" topLeftY="315" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="20">竞品 #3</span> - </p> - </content> - </shape> - <shape width="146" height="41" topLeftX="374" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p> - <strong>优势</strong> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="374" topLeftY="120" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="374" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="374" topLeftY="354" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="41" topLeftX="745" topLeftY="79" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>劣势</p> - </content> - </shape> - <shape width="146" height="74" topLeftX="745" topLeftY="120" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="745" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <shape width="146" height="74" topLeftX="745" topLeftY="354" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)" textAlign="center"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - </p> - </content> - </shape> - <line startX="352" startY="208" endX="542" endY="208"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="352" startY="332" endX="542" endY="332"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="722" startY="208" endX="913" endY="208"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="722" startY="331" endX="913" endY="331"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="164" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">04</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>活动思路</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p> Activity Ideas</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="308" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>活动思路</p> - </content> - </shape> - <img src="CZOnbA1troRlwZxlAtPcPnZynJh" width="244" height="150" topLeftX="366" topLeftY="120"> - <crop type="rect" leftOffset="46" rightOffset="0" topOffset="64" bottomOffset="77" presetHandlers="0"/> - </img> - <img src="Dwj0bfLj6oNOvfxDDTPcXP38nQg" width="244" height="158" topLeftX="649" topLeftY="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="29" bottomOffset="57" presetHandlers="0"/> - </img> - <shape width="261" height="74" topLeftX="641" topLeftY="175" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="641" topLeftY="141" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true"> - <p>促销活动</p> - </content> - </shape> - <shape width="261" height="74" topLeftX="358" topLeftY="329" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">。</span> - <span color="rgba(124, 125, 126, 1)" fontSize="12">描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="358" topLeftY="294" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true"> - <p> 试用活动</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <img src="PBaBbVkouoPSSDxKzfDcg0pFn3d" width="810" height="504" topLeftX="150" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="160" topOffset="309" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="150" height="164" topLeftX="151" topLeftY="134" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="96" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="96">05</span> - </p> - </content> - </shape> - <shape width="175" height="67" topLeftX="289" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="31" color="rgba(255, 255, 255, 1)"> - <p>营销推广</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p> Activity Ideas</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="270" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>活动思路</p> - </content> - </shape> - <shape width="563" height="132" topLeftX="335" topLeftY="205" type="slides-full-round-rect"> - <border color="rgba(60, 111, 229, 1)" width="24" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="191" height="200" topLeftX="321" topLeftY="259" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="119" height="282" topLeftX="304" topLeftY="98" flipX="true" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="78" height="78" topLeftX="365" topLeftY="168" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="78" topLeftX="568" topLeftY="168" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="180" height="41" topLeftX="570" topLeftY="67" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>主视觉设计</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="570" topLeftY="101" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="365" topLeftY="67" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>产品定位</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="365" topLeftY="101" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="180" height="41" topLeftX="478" topLeftY="383" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>营销活动</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="478" topLeftY="417" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="78" height="78" topLeftX="478" topLeftY="297" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="78" topLeftX="678" topLeftY="297" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="180" height="41" topLeftX="678" topLeftY="383" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>广告投放</p> - </content> - </shape> - <shape width="167" height="56" topLeftX="678" topLeftY="417" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <icon width="42" height="42" topLeftX="383" topLeftY="187" iconType="iconpark/Base/home.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="42" height="42" topLeftX="586" topLeftY="187" iconType="iconpark/Base/pic.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="42" height="42" topLeftX="696" topLeftY="317" iconType="iconpark/Office/envelope-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="42" height="42" topLeftX="496" topLeftY="317" iconType="iconpark/Office/newspaper-folding.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="543" topLeftX="0" topLeftY="-3" type="rect"> - <fill> - <fillColor color="rgba(239, 242, 246, 1)"/> - </fill> - </shape> - <shape width="225" height="41" topLeftX="32" topLeftY="167" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="false"> - <p> Activity Ideas</p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="239" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="207" height="74" topLeftX="32" topLeftY="317" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(124, 125, 126, 1)"> - <p> - <span color="rgba(124, 125, 126, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="267" height="92" topLeftX="27" topLeftY="93" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(60, 111, 229, 1)" bold="true"> - <p>活动思路</p> - </content> - </shape> - <line startX="362" startY="440" endX="362" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="536" startY="440" endX="535" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="722" startY="440" endX="722" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="895" startY="440" endX="895" endY="173" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="399" height="48" topLeftX="495" topLeftY="191" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">事项 #1</span> - </p> - </content> - </shape> - <shape width="337" height="48" topLeftX="450" topLeftY="252" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">事项 #2</span> - </p> - </content> - </shape> - <shape width="400" height="48" topLeftX="362" topLeftY="313" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)">事项 #3</span> - </p> - </content> - </shape> - <shape width="267" height="48" topLeftX="583" topLeftY="373" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p>事项 #4</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="362" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>前期筹备</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="538" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>执行期</p> - </content> - </shape> - <shape width="180" height="41" topLeftX="715" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)" bold="true" textAlign="center"> - <p>总结复盘</p> - </content> - </shape> - <line startX="362" startY="136" endX="895" endY="136"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="solid-triangle"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(60, 111, 229, 1)"/> - </fill> - </style> - <data> - <shape width="542" height="116" topLeftX="26" topLeftY="375" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">感谢观看</span> - </p> - </content> - </shape> - <shape width="464" height="62" topLeftX="33" topLeftY="326" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">Thank You</span> - </p> - </content> - </shape> - <img src="CaPpbVUruoFDoBxsOS2cpAOFnBe" width="459" height="464" topLeftX="501" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="22" topOffset="160" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="73" height="38" topLeftX="59" topLeftY="24" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="40" topLeftY="31" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/operations--marketing_plan.xml b/skills/lark-slides/assets/templates/operations--marketing_plan.xml deleted file mode 100644 index 91258c121..000000000 --- a/skills/lark-slides/assets/templates/operations--marketing_plan.xml +++ /dev/null @@ -1,1469 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>营销策划方案-裂图重新上传 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="XfIfbc1tYoFJ1sx5FWxcsCoBn0f" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="191" height="202" topLeftX="587" topLeftY="184" presetHandlers="8" alpha="0.9" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="545" height="101" topLeftX="207" topLeftY="204" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true" textAlign="center"> - <p>营销策划模板</p> - </content> - </shape> - <line startX="142" startY="47" endX="910" endY="47" alpha="0.29"> - <border color="rgba(147, 150, 156, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">1</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="615" height="44" topLeftX="172" topLeftY="290" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(147, 150, 156, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="16">MARKETING PLANNING </span> - </strong> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="16">TEMPLATE</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="92" height="116" topLeftX="295" topLeftY="26" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="161" height="77" topLeftX="319" topLeftY="71" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true" textAlign="center"> - <p>目录</p> - </content> - </shape> - <line startX="907" startY="119" endX="907" endY="515"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="908" startY="0" endX="908" endY="142"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="904" topLeftY="144" rotation="0" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">2</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="785" topLeftY="367" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="136" height="43" topLeftX="369" topLeftY="207" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动总体思路</span> - </strong> - </p> - </content> - </shape> - <shape width="136" height="38" topLeftX="369" topLeftY="229" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">General Idea</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="369" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="136" height="43" topLeftX="614" topLeftY="207" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动执行方案</span> - </strong> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="614" topLeftY="229" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="614" topLeftY="254" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <img src="NUtabqkWpohkfCxb523ckUYfnIf" width="254" height="489" topLeftX="26" topLeftY="26" exposure="16" contrast="-46" saturation="-93" temperature="-14"> - <crop type="rect" leftOffset="80" rightOffset="34" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="136" height="43" topLeftX="369" topLeftY="327" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动经费预算</span> - </strong> - </p> - </content> - </shape> - <shape width="136" height="38" topLeftX="369" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Budget</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="369" topLeftY="374" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="136" height="43" topLeftX="614" topLeftY="327" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" bold="true"> - <p> - <strong> - <span fontSize="15">活动预期效果</span> - </strong> - </p> - </content> - </shape> - <shape width="161" height="38" topLeftX="614" topLeftY="349" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Expected Results</span> - </strong> - </p> - </content> - </shape> - <shape width="203" height="56" topLeftX="614" topLeftY="374" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(66, 66, 66, 1)"> - <p> - <span color="rgba(66, 66, 66, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="Ha3Cbaf8PobZMvxI6VZcV7uznZc" width="480" height="540" topLeftX="480" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="27" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动总体思路</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="31" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">General Idea</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">3</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">4</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="101" height="90" topLeftX="41" topLeftY="88" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="407" height="62" topLeftX="77" topLeftY="118" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="true" textAlign="left"> - <p> - <span fontSize="28">活动总体思路</span> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="41" topLeftY="232" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="41" topLeftY="204" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="41" topLeftY="326" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="41" topLeftY="298" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="240" height="56" topLeftX="41" topLeftY="420" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="41" topLeftY="392" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <img src="Yb3sbX2Vooj3HyxQfB3cH9ErnOb" width="240" height="403" topLeftX="331" topLeftY="88" exposure="4" contrast="-51" saturation="-91" temperature="20"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="MhGabCLEBoKmRox0Q7dc6txbnhg" width="152" height="403" topLeftX="589" topLeftY="88" exposure="22" contrast="-35" saturation="-92" temperature="26"> - <crop type="rect" leftOffset="411" rightOffset="155" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="H8q1bdnT8o7bXAxIKIHc9IGLnUh" width="152" height="403" topLeftX="758" topLeftY="88" exposure="26" contrast="-35" saturation="-91" temperature="31"> - <crop type="rect" leftOffset="4" rightOffset="4" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="49" height="56" topLeftX="38" topLeftY="74" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">5</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="195" height="74" topLeftX="38" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="38" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第一阶段</span> - </strong> - </p> - </content> - </shape> - <shape width="407" height="56" topLeftX="47" topLeftY="82" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="left"> - <p> - <span fontSize="24">活动时间轴</span> - </p> - </content> - </shape> - <line startX="250" startY="194" endX="250" endY="426" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="195" height="74" topLeftX="267" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="267" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第二阶段</span> - </strong> - </p> - </content> - </shape> - <line startX="479" startY="194" endX="479" endY="426" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="195" height="74" topLeftX="498" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="498" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第三阶段</span> - </strong> - </p> - </content> - </shape> - <line startX="710" startY="194" endX="710" endY="426" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="195" height="74" topLeftX="727" topLeftY="194" alpha="0.88" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="195" height="38" topLeftX="727" topLeftY="388" presetHandlers="45" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="14">第四阶段</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="JezPbVNsHopdNuxR7ZecFO7Xnhf" width="480" height="540" topLeftX="480" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="27" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动执行方案</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="31" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">6</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="282" startY="250" endX="90" endY="250" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="907" startY="119" endX="907" endY="515"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="908" startY="0" endX="908" endY="142"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="904" topLeftY="144" rotation="0" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">7</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="785" topLeftY="367" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q3 Planning</span> - </strong> - </p> - </content> - </shape> - <shape width="261" height="68" topLeftX="30" topLeftY="64" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(24, 24, 26, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="32">活动执行方案</span> - </p> - </content> - </shape> - <shape width="231" height="44" topLeftX="34" topLeftY="41" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="16">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <shape width="34" height="34" topLeftX="46" topLeftY="233" type="ellipse"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="53" topLeftY="240" iconType="iconpark/Base/all-application.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="34" height="34" topLeftX="294" topLeftY="233" type="ellipse"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="301" topLeftY="240" iconType="iconpark/Office/transform.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="34" height="34" topLeftX="542" topLeftY="233" type="ellipse"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="549" topLeftY="240" iconType="iconpark/Travel/airplane.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <line startX="530" startY="250" endX="337" endY="250" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="240" height="41" topLeftX="42" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="192" height="56" topLeftX="62" topLeftY="314" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="53" topLeftY="332" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="192" height="38" topLeftX="62" topLeftY="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="53" topLeftY="378" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="240" height="41" topLeftX="294" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="192" height="56" topLeftX="313" topLeftY="314" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="305" topLeftY="332" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="192" height="38" topLeftX="313" topLeftY="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="305" topLeftY="378" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="192" height="74" topLeftX="313" topLeftY="391" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="305" topLeftY="408" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="240" height="41" topLeftX="542" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="192" height="56" topLeftX="561" topLeftY="314" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文此处添加正文</span> - </p> - </content> - </shape> - <shape width="12" height="2" topLeftX="553" topLeftY="332" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <line startX="907" startY="119" endX="907" endY="515"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="908" startY="0" endX="908" endY="142"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="904" topLeftY="144" rotation="0" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">8</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="785" topLeftY="367" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12"> European Market Q1 Planning</span> - </strong> - </p> - </content> - </shape> - <img src="W2oebPLuVoS3XzxoJc7cz2xtnxf" width="243" height="466" topLeftX="35" topLeftY="37" exposure="16" contrast="-46" saturation="-93" temperature="-14"> - <crop type="rect" leftOffset="8" rightOffset="8" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="60" height="64" topLeftX="341" topLeftY="163" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="177" height="59" topLeftX="361" topLeftY="179" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" bold="true" textAlign="left"> - <p> - <span fontSize="26">活动执行方案</span> - </p> - </content> - </shape> - <shape width="231" height="38" topLeftX="363" topLeftY="221" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="12">Program of Activities</span> - </strong> - </p> - </content> - </shape> - <shape width="188" height="254" topLeftX="363" topLeftY="252" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。</span> - </p> - <p/> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。此处添加正文此处添加正文,此处添加正文。此处添加正文此处添加正文,此处添加正文。</span> - </p> - <p/> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文。</span> - </p> - </content> - </shape> - <shape width="240" height="41" topLeftX="616" topLeftY="163" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题或更多内容</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="77" topLeftX="616" topLeftY="183" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="38">1,891+</span> - </strong> - </p> - </content> - </shape> - <line startX="817" startY="252" endX="624" endY="252" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="240" height="41" topLeftX="616" topLeftY="286" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题或更多内容</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="77" topLeftX="616" topLeftY="307" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="38">60+</span> - </strong> - </p> - </content> - </shape> - <line startX="817" startY="375" endX="624" endY="375" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="240" height="41" topLeftX="616" topLeftY="411" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题或更多内容</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="77" topLeftX="616" topLeftY="432" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 219, 29, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 219, 29, 1)" fontSize="38">13,762+</span> - </strong> - </p> - </content> - </shape> - <line startX="816" startY="500" endX="624" endY="500" alpha="0.7"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="KSLDbAtVTowNhQxnPfUcK4s2nzc" width="480" height="540" topLeftX="0" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="672" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动经费预算</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="699" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Budget</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">9</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="49" height="56" topLeftX="58" topLeftY="84" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">10</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <shape width="407" height="56" topLeftX="67" topLeftY="92" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="left"> - <p> - <span fontSize="24">活动经费预算</span> - </p> - </content> - </shape> - <img src="IrLPbZFuSok7kHxnOvFciHi9nPA" width="145" height="145" topLeftX="58" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="GO5pblEDSo03uExEIlEc9xXdnyd" width="145" height="145" topLeftX="267" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="EzCabT0y8o65r8xgM2Jcf25zncb" width="145" height="145" topLeftX="476" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="CULmb2XWmouit4xzxbKc3U7ynxg" width="145" height="145" topLeftX="685" topLeftY="198" exposure="12" saturation="-91" temperature="23"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="24" height="2" topLeftX="66" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="24" height="2" topLeftX="275" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="24" height="2" topLeftX="484" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="24" height="2" topLeftX="693" topLeftY="360" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="144" height="41" topLeftX="58" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="41" topLeftX="267" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="41" topLeftX="476" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="41" topLeftX="685" topLeftY="357" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(66, 66, 66, 1)" bold="true"> - <p> - <strong> - <span color="rgba(66, 66, 66, 1)" fontSize="14">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="58" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="266" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="476" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - <shape width="145" height="74" topLeftX="685" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="W9OibVJ7cooFpyxooUpcU5Jfnfd" width="527" height="361" topLeftX="433" topLeftY="96" exposure="62" contrast="12" saturation="-92" temperature="1"> - <crop type="rect" leftOffset="59" rightOffset="59" topOffset="0" bottomOffset="0" presetHandlers="4"/> - </img> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">11</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <img src="IcRMb9tt6ony53x6QO6cUxAknne" width="587" height="407" topLeftX="373" topLeftY="91" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="88" topOffset="0" bottomOffset="0"/> - </img> - <shape width="63" height="64" topLeftX="32" topLeftY="91" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="177" height="59" topLeftX="52" topLeftY="107" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="26" bold="true" textAlign="left"> - <p> - <span fontSize="26">活动经费预算</span> - </p> - </content> - </shape> - <shape width="34" height="34" topLeftX="63" topLeftY="201" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(66, 66, 66, 1)"/> - </fill> - <border color="rgba(147, 150, 156, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="20" height="20" topLeftX="70" topLeftY="208" alpha="0.6" iconType="iconpark/Money/paper-money-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="34" height="34" topLeftX="63" topLeftY="302" alpha="0.6" type="ellipse"> - <fill> - <fillColor color="rgba(66, 66, 66, 1)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="70" topLeftY="309" alpha="0.6" iconType="iconpark/Money/financing-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="144" height="44" topLeftX="101" topLeftY="195" alpha="0.7" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="44" topLeftX="101" topLeftY="297" alpha="0.7" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">此处添加小标题</span> - </strong> - </p> - </content> - </shape> - <shape width="232" height="56" topLeftX="101" topLeftY="228" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。</span> - </p> - </content> - </shape> - <shape width="232" height="56" topLeftX="101" topLeftY="329" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">此处添加正文此处添加正文,此处添加正文此处添加正文,此处添加正文。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <img src="UnojbYZiZoljtNxOh8AcvjpGnck" width="480" height="540" topLeftX="0" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="261" height="74" topLeftX="672" topLeftY="434" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" color="rgba(24, 24, 26, 1)" bold="true" textAlign="right"> - <p> - <span color="rgba(24, 24, 26, 1)" fontSize="36">活动预期效果</span> - </p> - </content> - </shape> - <shape width="231" height="47" topLeftX="699" topLeftY="407" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Expected Results</span> - </strong> - </p> - </content> - </shape> - <line startX="142" startY="47" endX="676" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">12</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="481" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="FtzebenNwoDtQoxtmggceadnn1d" width="961" height="539" topLeftX="0" topLeftY="0" exposure="16" saturation="-91" temperature="12"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="674" height="476" topLeftX="217" topLeftY="22" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="300" fontFamily="Trebuchet MS" color="rgba(255, 219, 29, 1)" bold="true" textAlign="center"> - <p> - <span color="rgba(255, 219, 29, 1)" fontSize="300" fontFamily="Trebuchet MS">40%</span> - </p> - </content> - </shape> - <shape width="165" height="122" topLeftX="100" topLeftY="97" type="triangle"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <shape width="35" height="157" topLeftX="165" topLeftY="213" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <img src="HJQ4bD96zoxB41xEmHncaqUVnrc" width="771" height="202" topLeftX="73" topLeftY="318" exposure="16" saturation="-91" temperature="12"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="20" presetHandlers="0"/> - </img> - <line startX="142" startY="47" endX="910" endY="47" alpha="0.29"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">13</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="49" height="56" topLeftX="58" topLeftY="84" presetHandlers="8" type="rect"> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </shape> - <line startX="142" startY="47" endX="910" endY="47"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 219, 29, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true"> - <p> - <strong> - <span color="rgba(147, 150, 156, 1)" fontSize="12">14</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="640" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)" bold="true" textAlign="right"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <shape width="407" height="56" topLeftX="67" topLeftY="92" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" textAlign="left"> - <p> - <span fontSize="24">活动预期效果</span> - </p> - </content> - </shape> - <shape width="213" height="74" topLeftX="707" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="707" topLeftY="338" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #6</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="656" topLeftY="338" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="26" height="26" topLeftX="666" topLeftY="348" iconType="iconpark/Base/tag-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="707" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="707" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #3</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="656" topLeftY="199" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="664" topLeftY="206" iconType="iconpark/Base/hourglass-null.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="408" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="408" topLeftY="338" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #5</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="357" topLeftY="338" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="26" height="26" topLeftX="367" topLeftY="348" iconType="iconpark/Base/lightning.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="408" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="408" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #2</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="357" topLeftY="199" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="365" topLeftY="206" iconType="iconpark/Base/aiming.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="108" topLeftY="382" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="108" topLeftY="338" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #4</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="58" topLeftY="338" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="26" height="26" topLeftX="68" topLeftY="348" iconType="iconpark/Abstract/game-emoji.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="213" height="74" topLeftX="108" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(147, 150, 156, 1)"> - <p> - <span color="rgba(147, 150, 156, 1)" fontSize="12">输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="218" height="41" topLeftX="108" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <span fontSize="14">预期效果 #1</span> - </p> - </content> - </shape> - <shape width="47" height="47" topLeftX="58" topLeftY="199" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - </shape> - <icon width="30" height="30" topLeftX="66" topLeftY="206" iconType="iconpark/Travel/mountain.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 219, 29, 1)"/> - </fill> - </style> - <data> - <shape width="337" height="78" topLeftX="600" topLeftY="417" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true" lineSpacing="multiple:1.2" textAlign="right"> - <p lineSpacing="multiple:1.2"> - <span fontSize="48">谢谢观看</span> - </p> - </content> - </shape> - <img src="C7EfbhI7PoHav4xydHsc789rnsf" width="534" height="540" topLeftX="0" topLeftY="0" exposure="14" contrast="-55" saturation="-92" temperature="31"> - <crop type="rect" leftOffset="0" rightOffset="6" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <line startX="142" startY="47" endX="726" endY="47"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="0" startY="46" endX="142" endY="46"> - <border color="rgba(255, 255, 255, 1)" width="3" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="49" height="38" topLeftX="158" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12">15</span> - </strong> - </p> - </content> - </shape> - <shape width="276" height="38" topLeftX="534" topLeftY="16" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> European Market Q1 Planning</p> - </content> - </shape> - <shape width="231" height="50" topLeftX="699" topLeftY="385" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">Thank you</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/operations--product_promotion.xml b/skills/lark-slides/assets/templates/operations--product_promotion.xml deleted file mode 100644 index 4f82d9cf9..000000000 --- a/skills/lark-slides/assets/templates/operations--product_promotion.xml +++ /dev/null @@ -1,687 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>产品推广方案-裂图重新上传 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF" fontSize="14"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style/> - <data> - <img src="KQ11bto5XoGHbCxBHmMchsYOn9e" width="251" height="425" topLeftX="578" topLeftY="65"> - <crop type="rect" leftOffset="6" rightOffset="169" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="39" height="425" topLeftX="578" topLeftY="65" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="536" height="180" topLeftX="84" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span fontSize="80">DIGITAL</span> - </p> - <p lineSpacing="multiple:1"> - <span fontSize="80">MARKETING</span> - </p> - </content> - </shape> - <shape width="325" height="68" topLeftX="84" topLeftY="257" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>产品推广计划</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="250" height="77" topLeftX="56" topLeftY="85" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>CONTENTS</p> - </content> - </shape> - <shape width="250" height="68" topLeftX="56" topLeftY="142" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <span bold="false">目录</span> - </p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="102" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">01</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="113" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">关于我们</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="114" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="189" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">02</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="200" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">愿景&目标</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="201" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="275" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">03</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="287" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">品牌策略</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="288" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="372" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">04</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="384" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3">核心产品</p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="385" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">01</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">关于我们</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <img src="KFOtbv5TUoKxm8x9dDfcfb6snEd" width="202" height="128" topLeftX="257" topLeftY="75" exposure="5" contrast="-12" saturation="-24" temperature="-65"> - <crop type="rect" leftOffset="126" rightOffset="29" topOffset="212" bottomOffset="18" presetHandlers="0"/> - </img> - <img src="KFOtbv5TUoKxm8x9dDfcfb6snEd" width="202" height="128" topLeftX="38" topLeftY="75" flipY="true" exposure="5" contrast="-12" saturation="-24" temperature="-73"> - <crop type="rect" leftOffset="0" rightOffset="202" topOffset="101" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="250" height="140" topLeftX="28" topLeftY="323" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" bold="true"> - <p> - <span fontSize="80">Hello</span> - </p> - </content> - </shape> - <shape width="250" height="68" topLeftX="32" topLeftY="293" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <span bold="false">你好</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="34" topLeftY="215" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="395" height="74" topLeftX="507" topLeftY="99" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="395" height="230" topLeftX="507" topLeftY="229" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="TE9RblFGdowyVexgIYIc2GEonJd" width="395" height="230" topLeftX="507" topLeftY="229" saturation="-43" temperature="-100"> - <crop type="rect" leftOffset="20" rightOffset="17" topOffset="88" bottomOffset="113" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="372" height="116" topLeftX="28" topLeftY="130" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true"> - <p>About us</p> - </content> - </shape> - <shape width="250" height="56" topLeftX="32" topLeftY="103" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">关于我们</span> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="32" topLeftY="235" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <img src="TDYmbbCrPoAAz0xgXVwcbblrn4f" width="395" height="415" topLeftX="507" topLeftY="44" saturation="-100" temperature="-100"> - <crop type="rect" leftOffset="26" rightOffset="68" topOffset="30" bottomOffset="45" presetHandlers="0"/> - </img> - <shape width="39" height="415" topLeftX="863" topLeftY="44" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">02</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)">愿景&目标</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="460" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="250" height="92" topLeftX="65" topLeftY="100" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true"> - <p> - <span fontSize="48">Vision</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="65" topLeftY="168" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="318" height="92" topLeftX="482" topLeftY="100" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true"> - <p> - <span fontSize="48">Mission</span> - </p> - </content> - </shape> - <shape width="250" height="56" topLeftX="65" topLeftY="72" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">愿景</span> - </p> - </content> - </shape> - <shape width="250" height="56" topLeftX="482" topLeftY="72" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">目标</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="482" topLeftY="168" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="395" height="189" topLeftX="74" topLeftY="240" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="EnkQbyTJKouv4bx15ezccGjinXc" width="395" height="189" topLeftX="74" topLeftY="240"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="206" presetHandlers="0"/> - </img> - <img src="ProZbJDy5omwBlxreCgcPqA9nOc" width="395" height="189" topLeftX="491" topLeftY="240" exposure="5" contrast="-23" saturation="-30" temperature="-42"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="118" bottomOffset="88" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">03</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)">品牌策略</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="372" height="116" topLeftX="28" topLeftY="130" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true"> - <p>Strategy</p> - </content> - </shape> - <shape width="250" height="56" topLeftX="32" topLeftY="103" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">推广策略</span> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="32" topLeftY="245" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">04</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)" bold="false">核心项目</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="196" height="50" topLeftX="95" topLeftY="77" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">Project 01 - XXX</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="49" topLeftX="81" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="81" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="98" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="231" height="49" topLeftX="365" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="365" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="382" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="231" height="49" topLeftX="648" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="648" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="666" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="66" height="66" topLeftX="163" topLeftY="221" iconType="iconpark/Base/bookmark.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="66" height="66" topLeftX="447" topLeftY="221" iconType="iconpark/Base/camera.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="66" height="66" topLeftX="731" topLeftY="221" iconType="iconpark/Office/list-view.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="554" height="56" topLeftX="291" topLeftY="77" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="318" height="74" topLeftX="32" topLeftY="271" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="202" height="465" topLeftX="379" topLeftY="37" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="196" height="50" topLeftX="32" topLeftY="221" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">Project 02 - XXX</span> - </strong> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="610" topLeftY="93" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="202" height="226" topLeftX="610" topLeftY="276" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="GGuFbd8azoDXASxtmdRcCjG0nrf" width="202" height="465" topLeftX="379" topLeftY="37" saturation="-73" temperature="-57"> - <crop type="rect" leftOffset="132" rightOffset="132" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="LYMEbK4ZroZq9pxhlNfcdHignHe" width="201" height="226" topLeftX="610" topLeftY="276" exposure="-4" contrast="-19" saturation="-23" temperature="-32"> - <crop type="rect" leftOffset="200" rightOffset="0" topOffset="64" bottomOffset="111" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="KQ11bto5XoGHbCxBHmMchsYOn9e" width="251" height="425" topLeftX="578" topLeftY="65"> - <crop type="rect" leftOffset="6" rightOffset="169" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="39" height="425" topLeftX="578" topLeftY="65" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="536" height="180" topLeftX="84" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span fontSize="80">THANK</span> - </p> - <p lineSpacing="multiple:1"> - <span fontSize="80">YOU</span> - </p> - </content> - </shape> - <shape width="325" height="68" topLeftX="84" topLeftY="257" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>感谢观看</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/personal--experience_sharing.xml b/skills/lark-slides/assets/templates/personal--experience_sharing.xml deleted file mode 100644 index 5fef15165..000000000 --- a/skills/lark-slides/assets/templates/personal--experience_sharing.xml +++ /dev/null @@ -1,2242 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>经验分享 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="Y9h2btHFWojmQvx3CGTcAn4Lnvf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="Agrob4Jlbo7prnxeL9vcb2xmnoe" width="548" height="262" topLeftX="-14" topLeftY="263" rotation="9" alpha="0.4"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="400" height="63" topLeftX="50" topLeftY="293" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="400" height="81" topLeftX="50" topLeftY="189" type="text"> - <content textType="title" fontSize="54" fontFamily="思源黑体" bold="true"> - <p>工作经验分享</p> - </content> - </shape> - <shape width="120" height="25" topLeftX="50" topLeftY="375" presetHandlers="4" type="rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(113, 170, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)"/> - </fill> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="12">分享者:某某某</span> - </p> - </content> - </shape> - <img src="RXoWbeLjlo2n38xxqDtcLxF8nZb" width="439" height="434" topLeftX="521" topLeftY="58"> - <crop type="rect" leftOffset="0" rightOffset="279" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="CDVMbQVUgoLxd2x40YzcXXfDnBg" width="376" height="388" topLeftX="585" topLeftY="68"> - <crop type="rect" leftOffset="0" rightOffset="289" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="Pjoyb78Rdof062xhu6dcnwoenTh" width="141" height="306" topLeftX="474" topLeftY="199"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="VmOyb6JmSog3xsxyArpce0npnVd" width="156" height="316" topLeftX="467" topLeftY="194" rotation="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="72" height="18" topLeftX="78" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="50" topLeftY="38" iconType="iconpark/Abstract/api-app.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NpNDb60f2onXI3xw9oVcH2sdnCb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="AMdDb4GlsomFakxifhVcH6TenNh" width="612" height="361" topLeftX="245" topLeftY="179" alpha="0.4"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="46" presetHandlers="0"/> - </img> - <shape width="192" height="274" topLeftX="50" topLeftY="153" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="192" height="274" topLeftX="274" topLeftY="153" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="192" height="274" topLeftX="498" topLeftY="153" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="192" height="274" topLeftX="721" topLeftY="153" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.7)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="170" height="42" topLeftX="61" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="170" height="30" topLeftX="61" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>自我介绍</p> - </content> - </shape> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>目录</p> - </content> - </shape> - <shape width="170" height="42" topLeftX="285" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="170" height="30" topLeftX="285" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>项目流程</p> - </content> - </shape> - <shape width="170" height="42" topLeftX="509" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="170" height="30" topLeftX="509" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>经验教训</p> - </content> - </shape> - <img src="WWlWbVpJ0oqnyKx9C6ucI0T8nEh" width="170" height="130" topLeftX="733" topLeftY="164"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="UN4bbySoHoksyNxiUWdcKLNtnjf" width="170" height="130" topLeftX="509" topLeftY="164"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="WWlWbVpJ0oqnyKx9C6ucI0T8nEh" width="170" height="130" topLeftX="285" topLeftY="164"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="M08cbzJIPo8nOHxVSQ8ce5BqnFb" width="170" height="130" topLeftX="61" topLeftY="164"> - <crop type="rect" leftOffset="3" rightOffset="3" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="170" height="42" topLeftX="733" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="170" height="30" topLeftX="733" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>工作技巧</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="I097brAnnoQ7MPxog13cyvYrnLd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.4"> - <crop type="rect" leftOffset="658" rightOffset="572" topOffset="828" bottomOffset="180" presetHandlers="0"/> - </img> - <img src="SBTYbKGAHomWYcxxZwjcFtM9npA" width="507" height="414" topLeftX="-5" topLeftY="63" rotation="62" alpha="0.06"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="370" height="84" topLeftX="416" topLeftY="270" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="370" height="81" topLeftX="419" topLeftY="178" type="text"> - <content textType="title" fontSize="54" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">自我介绍</span> - </p> - </content> - </shape> - <shape width="241" height="300" topLeftX="174" topLeftY="120" type="text"> - <content textType="title" fontSize="200" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="G8hUbZ1OjosIxixVk2ocRARRnWh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="HGkubS7Quo0oEZxJ0VZcAX2JnVg" width="376" height="540" topLeftX="584" topLeftY="0"> - <crop type="rect" leftOffset="300" rightOffset="135" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="378" height="120" topLeftX="50" topLeftY="69" type="text"> - <content textType="title" fontSize="40" fontFamily="思源黑体" color="rgba(53, 49, 58, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="40">Hi</span> - </strong> - <strong> - <span color="rgba(73, 125, 245, 1)" fontSize="40"> </span> - </strong> - </p> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="40">I'M 某某某</span> - </strong> - </p> - </content> - </shape> - <line startX="125" startY="203" endX="125" endY="223"> - <border color="rgba(221, 222, 223, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="63" height="30" topLeftX="50" topLeftY="198" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20">某公司</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="329" iconType="iconpark/Base/config.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="108" height="30" topLeftX="137" topLeftY="198" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">产品总监</span> - </p> - </content> - </shape> - <shape width="491" height="42" topLeftX="50" topLeftY="256" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述主讲人背景,输入相关的描述信息描述主讲人背景,输入相关的描述信息描述主讲人背景</span> - </p> - </content> - </shape> - <shape width="452" height="21" topLeftX="89" topLeftY="330" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述主讲人信息</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="365" iconType="iconpark/Charts/data-screen.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="452" height="21" topLeftX="89" topLeftY="366" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述主讲人信息</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="399" iconType="iconpark/Game/trophy.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="452" height="21" topLeftX="89" topLeftY="400" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述主讲人奖项</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="435" iconType="iconpark/Game/trophy.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="452" height="21" topLeftX="89" topLeftY="436" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述主讲人奖项</span> - </p> - </content> - </shape> - <shape width="182" height="21" topLeftX="50" topLeftY="293" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="960" height="224" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="I097brAnnoQ7MPxog13cyvYrnLd" width="960" height="224" topLeftX="0" topLeftY="0" alpha="0.4"> - <crop type="rect" leftOffset="658" rightOffset="572" topOffset="1144" bottomOffset="180" presetHandlers="0"/> - </img> - <shape width="960" height="351" topLeftX="0" topLeftY="189" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <shadow offset="0" angle="270" blur="16" color="rgba(0, 0, 0, 0.13)"/> - </shape> - <img src="Z2w3bF8aBov0F6xKMVPc1nqUnId" width="960" height="351" topLeftX="0" topLeftY="189" alpha="0.3"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="16"/> - </img> - <img src="AMdDb4GlsomFakxifhVcH6TenNh" width="480" height="319" topLeftX="456" topLeftY="-17" rotation="313" alpha="0.1"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <line startX="42" startY="325" endX="919" endY="325"> - <border color="rgba(222, 224, 227, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="16" height="16" topLeftX="42" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(248, 248, 248, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" blur="36"/> - </shape> - <shape width="8" height="8" topLeftX="46" topLeftY="322" type="ellipse"> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - </shape> - <shape width="16" height="16" topLeftX="268" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(248, 248, 248, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" blur="36"/> - </shape> - <shape width="8" height="8" topLeftX="272" topLeftY="322" type="ellipse"> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - </shape> - <shape width="16" height="16" topLeftX="493" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(248, 248, 248, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" blur="36"/> - </shape> - <shape width="8" height="8" topLeftX="497" topLeftY="322" type="ellipse"> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - </shape> - <shape width="16" height="16" topLeftX="719" topLeftY="318" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(248, 248, 248, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="0" blur="36"/> - </shape> - <shape width="8" height="8" topLeftX="723" topLeftY="322" type="ellipse"> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - </shape> - <shape width="490" height="42" topLeftX="42" topLeftY="106" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </content> - </shape> - <shape width="490" height="48" topLeftX="42" topLeftY="50" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>个人经验和成就</p> - </content> - </shape> - <shape width="200" height="63" topLeftX="42" topLeftY="397" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="42" topLeftY="357" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>经验和成就</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="719" topLeftY="272" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p>2026</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="493" topLeftY="272" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p>2025</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="268" topLeftY="272" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p>2024</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="42" topLeftY="272" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="Arial" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p>2023</p> - </content> - </shape> - <shape width="200" height="63" topLeftX="268" topLeftY="397" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="268" topLeftY="357" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>经验和成就</p> - </content> - </shape> - <shape width="200" height="63" topLeftX="493" topLeftY="397" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="493" topLeftY="357" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>经验和成就</p> - </content> - </shape> - <shape width="200" height="63" topLeftX="719" topLeftY="397" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="719" topLeftY="357" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>经验和成就</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="I097brAnnoQ7MPxog13cyvYrnLd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.4"> - <crop type="rect" leftOffset="658" rightOffset="572" topOffset="828" bottomOffset="180" presetHandlers="0"/> - </img> - <img src="SBTYbKGAHomWYcxxZwjcFtM9npA" width="507" height="414" topLeftX="-5" topLeftY="63" rotation="62" alpha="0.06"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="370" height="84" topLeftX="416" topLeftY="270" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="370" height="81" topLeftX="416" topLeftY="178" type="text"> - <content textType="title" fontSize="54" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">项目流程</span> - </p> - </content> - </shape> - <shape width="241" height="300" topLeftX="174" topLeftY="120" type="text"> - <content textType="title" fontSize="200" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>项目背景</p> - </content> - </shape> - <shape width="214" height="30" topLeftX="439" topLeftY="77" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="20" fontFamily="Arial">Before</span> - </strong> - </p> - </content> - </shape> - <shape width="214" height="30" topLeftX="692" topLeftY="77" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(0, 0, 0, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="20" fontFamily="Arial">After</span> - </strong> - </p> - </content> - </shape> - <img src="HrMwbLZVlohWW4xBV59cqGcUnTc" width="167" height="361" topLeftX="462" topLeftY="126"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="TDlsbLTkTo1k4exdmbYcQx5Bnac" width="185" height="374" topLeftX="454" topLeftY="120"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GwVhbztihoqbHrxfDdVcYHNCnYb" width="167" height="361" topLeftX="715" topLeftY="126"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="NfYLbrlfjo8tVUxH38hc28jInGf" width="185" height="374" topLeftX="707" topLeftY="120"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="314" height="30" topLeftX="87" topLeftY="147" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p>项目背景</p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="151" iconType="iconpark/Office/newspaper-folding.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="314" height="30" topLeftX="87" topLeftY="258" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p>难点</p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="262" iconType="iconpark/Office/book-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="314" height="30" topLeftX="87" topLeftY="365" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p>策略</p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="369" iconType="iconpark/Base/save.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="314" height="42" topLeftX="87" topLeftY="186" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="314" height="42" topLeftX="87" topLeftY="294" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="314" height="42" topLeftX="87" topLeftY="403" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>项目流程</p> - </content> - </shape> - <shape width="269" height="32" topLeftX="198" topLeftY="50" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20" fontFamily="Arial">STEP 1 </span> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20">标题</span> - </p> - </content> - </shape> - <line startX="295" startY="174" endX="358" endY="174"> - <border color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="arrow"/> - </line> - <line startX="602" startY="174" endX="668" endY="174"> - <border color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - <endArrow type="arrow"/> - </line> - <shape width="244" height="216" topLeftX="50" topLeftY="215" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="244" height="99" topLeftX="358" topLeftY="215" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="244" height="99" topLeftX="358" topLeftY="332" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="244" height="216" topLeftX="670" topLeftY="215" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="209" height="24" topLeftX="70" topLeftY="225" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="16">标题</span> - </p> - </content> - </shape> - <shape width="94" height="48" topLeftX="66" topLeftY="260" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20"> </span> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial">75</span> - <span color="rgba(0, 0, 0, 1)" fontSize="20" fontFamily="Arial">w</span> - </p> - </content> - </shape> - <shape width="94" height="21" topLeftX="66" topLeftY="304" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="none" textAlign="left"> - <p list="none" textAlign="left"> - <span color="rgba(85, 85, 85, 1)">活跃</span> - </p> - </content> - </shape> - <shape width="94" height="48" topLeftX="185" topLeftY="261" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20"> </span> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial">90</span> - <span color="rgba(0, 0, 0, 1)" fontSize="20" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="94" height="21" topLeftX="185" topLeftY="305" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="none" textAlign="left"> - <p list="none" textAlign="left"> - <span color="rgba(85, 85, 85, 1)">分发</span> - </p> - </content> - </shape> - <shape width="94" height="48" topLeftX="66" topLeftY="340" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20"> </span> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial">18</span> - <span color="rgba(0, 0, 0, 1)" fontSize="20" fontFamily="Arial">平方</span> - </p> - </content> - </shape> - <shape width="94" height="21" topLeftX="66" topLeftY="384" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="none" textAlign="left"> - <p list="none" textAlign="left"> - <span color="rgba(85, 85, 85, 1)">数据</span> - </p> - </content> - </shape> - <shape width="94" height="48" topLeftX="185" topLeftY="342" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20"> </span> - <span color="rgba(0, 0, 0, 1)" fontSize="32" fontFamily="Arial">912</span> - <span color="rgba(0, 0, 0, 1)" fontSize="20" fontFamily="Arial">w</span> - </p> - </content> - </shape> - <shape width="94" height="21" topLeftX="185" topLeftY="385" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="none" textAlign="left"> - <p list="none" textAlign="left"> - <span color="rgba(85, 85, 85, 1)">数据</span> - </p> - </content> - </shape> - <shape width="214" height="24" topLeftX="374" topLeftY="225" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">用户诉求</span> - </p> - </content> - </shape> - <shape width="214" height="24" topLeftX="374" topLeftY="346" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="16">用户诉求</span> - </p> - </content> - </shape> - <shape width="214" height="24" topLeftX="686" topLeftY="225" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">产品策略</span> - </p> - </content> - </shape> - <shape width="214" height="42" topLeftX="374" topLeftY="258" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述</span> - </p> - </content> - </shape> - <shape width="214" height="42" topLeftX="374" topLeftY="375" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述</span> - </p> - </content> - </shape> - <shape width="214" height="42" topLeftX="686" topLeftY="258" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="bullet" listStyle="circle-hollow-square"> - <ul listStyle="circle-hollow-square"> - <li> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="214" height="42" topLeftX="686" topLeftY="316" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="bullet" listStyle="circle-hollow-square"> - <ul listStyle="circle-hollow-square"> - <li> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="214" height="42" topLeftX="686" topLeftY="375" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" list="bullet" listStyle="circle-hollow-square"> - <ul listStyle="circle-hollow-square"> - <li> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="244" height="48" topLeftX="358" topLeftY="149" presetHandlers="12" type="rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20" fontFamily="思源黑体">用户诉求</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" blur="34" color="rgba(0, 0, 0, 0.06)"/> - </shape> - <shape width="244" height="48" topLeftX="50" topLeftY="149" presetHandlers="12" type="rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">数据情况</span> - </p> - </content> - <shadow offset="14" angle="90" blur="34" color="rgba(0, 0, 0, 0.06)"/> - </shape> - <shape width="244" height="48" topLeftX="670" topLeftY="149" presetHandlers="12" type="rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20" fontFamily="思源黑体">产品策略</span> - </strong> - </p> - </content> - <shadow offset="14" angle="90" blur="34" color="rgba(0, 0, 0, 0.06)"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="HoQvb28y6ojQXxx1LRbcr79Rnmg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="268" height="352" topLeftX="50" topLeftY="127" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="268" height="352" topLeftX="350" topLeftY="127" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="268" height="352" topLeftX="645" topLeftY="127" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="244" height="84" topLeftX="62" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="244" height="30" topLeftX="62" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>优化方案</p> - </content> - </shape> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>项目流程</p> - </content> - </shape> - <shape width="244" height="84" topLeftX="362" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="244" height="30" topLeftX="362" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>优化方案</p> - </content> - </shape> - <img src="XaZdbFuAcoHxhoxe8mectkBfnmg" width="244" height="156" topLeftX="657" topLeftY="141"> - <crop type="rect" leftOffset="0.31" rightOffset="0.31" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="MhrybIwZZoz2Gbx4Jf0ceiC1nwe" width="244" height="156" topLeftX="362" topLeftY="141"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="70" bottomOffset="70" presetHandlers="8"/> - </img> - <img src="HgrsbPrsLoDwS0xsybucFUy8nZg" width="244" height="156" topLeftX="62" topLeftY="141"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.51" bottomOffset="0.51" presetHandlers="8"/> - </img> - <shape width="244" height="84" topLeftX="657" topLeftY="358" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="244" height="30" topLeftX="657" topLeftY="318" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>优化方案</p> - </content> - </shape> - <shape width="269" height="32" topLeftX="198" topLeftY="50" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20" fontFamily="Arial">STEP 2 </span> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20">标题</span> - </p> - </content> - </shape> - <img src="MhrybIwZZoz2Gbx4Jf0ceiC1nwe" width="244" height="156" topLeftX="362" topLeftY="141"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="137" bottomOffset="2" presetHandlers="8"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>项目流程</p> - </content> - </shape> - <shape width="269" height="32" topLeftX="198" topLeftY="50" type="text"> - <content textType="headline" fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20" fontFamily="Arial">STEP 3 </span> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20">标题</span> - </p> - </content> - </shape> - <shape width="294" height="367" topLeftX="608" topLeftY="125" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="Mcv6bIdsOolSpmxS3Vsct7mcnwc" width="295" height="367" topLeftX="607" topLeftY="125" alpha="0.4"> - <shadow offset="13" blur="45" color="rgba(30, 47, 88, 0.35)"/> - <crop type="rect" leftOffset="202" rightOffset="176" topOffset="563" bottomOffset="123" presetHandlers="12"/> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="VNIGbqkVgoLiefx8Cmocw8vKnrc" width="278" height="155" topLeftX="616" topLeftY="337" rotation="360" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="72" presetHandlers="0"/> - </img> - <shape width="254" height="30" topLeftX="625" topLeftY="143" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>标题</p> - </content> - </shape> - <shape width="254" height="147" topLeftX="627" topLeftY="186" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" list="bullet" listStyle="circle-hollow-square" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <line startX="882" startY="365" endX="627" endY="365"> - <border color="rgba(221, 222, 223, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="252" height="60" topLeftX="627" topLeftY="380" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="20">提效 </span> - <span color="rgba(255, 255, 255, 1)" fontSize="40" fontFamily="Arial">75 </span> - <span color="rgba(255, 255, 255, 1)" fontSize="20">%</span> - </p> - </content> - </shape> - <shape width="252" height="21" topLeftX="627" topLeftY="440" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" list="none" textAlign="left"> - <p list="none" textAlign="left">平均流转耗时缩减为 1/4</p> - </content> - </shape> - <img src="QqDWb0utco37ztxvUZscG0Btnqh" width="167" height="361" topLeftX="397" topLeftY="126"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="NfYLbrlfjo8tVUxH38hc28jInGf" width="185" height="374" topLeftX="389" topLeftY="120"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="269" height="30" topLeftX="87" topLeftY="147" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20">标题</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="151" iconType="iconpark/Office/newspaper-folding.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="269" height="30" topLeftX="87" topLeftY="258" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">标题</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="262" iconType="iconpark/Office/book-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="269" height="30" topLeftX="87" topLeftY="365" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">标题</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="50" topLeftY="369" iconType="iconpark/Base/save.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="269" height="42" topLeftX="87" topLeftY="186" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="269" height="42" topLeftX="87" topLeftY="294" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="269" height="42" topLeftX="87" topLeftY="403" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>项目结果</p> - </content> - </shape> - <shape width="423" height="385" topLeftX="499" topLeftY="107" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <undefined type="chart_refer_host_perm"/> - <shape width="400" height="60" topLeftX="50" topLeftY="250" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(52, 113, 252, 1)" bold="true" list="none"> - <p list="none"> - <strong> - <span color="rgba(52, 113, 252, 1)" fontSize="20">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </strong> - </p> - </content> - </shape> - <shape width="82" height="48" topLeftX="50" topLeftY="166" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">1290</span> - </p> - </content> - </shape> - <icon width="21" height="21" topLeftX="132" topLeftY="178" iconType="iconpark/Charts/chart-line.svg"> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="110" height="21" topLeftX="50" topLeftY="141" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>指标 A 增长</p> - </content> - </shape> - <shape width="67" height="48" topLeftX="239" topLeftY="166" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)">820</span> - </p> - </content> - </shape> - <icon width="21" height="21" topLeftX="306" topLeftY="178" iconType="iconpark/Charts/chart-line.svg"> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="110" height="21" topLeftX="239" topLeftY="141" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>指标 B 增长</p> - </content> - </shape> - <shape width="400" height="42" topLeftX="50" topLeftY="328" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="400" height="63" topLeftX="50" topLeftY="389" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>项目结果</p> - </content> - </shape> - <shape width="870" height="308" topLeftX="47" topLeftY="146" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <table topLeftX="59" topLeftY="159"> - <colgroup> - <col span="1" width="59"/> - <col span="1" width="252"/> - <col span="1" width="335"/> - <col span="1" width="199"/> - </colgroup> - <tr height="38"> - <td> - <borderTop color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"/> - </content> - </td> - <td> - <borderTop color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)">名称</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)">描述</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(52, 113, 252, 1)"/> - </fill> - <content paddingRight="6" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)">结果</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="54"> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">1</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content paddingRight="6" fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">结果</span> - </p> - </content> - </td> - </tr> - <tr height="48"> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">2</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content paddingRight="6" fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">结果</span> - </p> - </content> - </td> - </tr> - <tr height="48"> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">3</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content paddingRight="6" fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">结果</span> - </p> - </content> - </td> - </tr> - <tr height="48"> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">4</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(248, 248, 248, 1)"/> - </fill> - <content paddingRight="6" fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">结果</span> - </p> - </content> - </td> - </tr> - <tr height="48"> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">5</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">输入相关的描述信息描述上述主题</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(248, 248, 248, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content paddingRight="6" fontSize="14" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" textAlign="left"> - <p textAlign="left"> - <span color="rgba(0, 0, 0, 1)">结果</span> - </p> - </content> - </td> - </tr> - </table> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="I097brAnnoQ7MPxog13cyvYrnLd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.4"> - <crop type="rect" leftOffset="658" rightOffset="572" topOffset="828" bottomOffset="180" presetHandlers="0"/> - </img> - <img src="SBTYbKGAHomWYcxxZwjcFtM9npA" width="507" height="414" topLeftX="-5" topLeftY="63" rotation="62" alpha="0.06"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="370" height="84" topLeftX="416" topLeftY="270" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="370" height="81" topLeftX="416" topLeftY="178" type="text"> - <content textType="title" fontSize="54" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">经验教训</span> - </p> - </content> - </shape> - <shape width="241" height="300" topLeftX="174" topLeftY="120" type="text"> - <content textType="title" fontSize="200" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>如何应对挑战</p> - </content> - </shape> - <shape width="268" height="367" topLeftX="361" topLeftY="121" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="268" height="367" topLeftX="647" topLeftY="121" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="218" height="30" topLeftX="386" topLeftY="142" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(85, 85, 85, 1)">Before</span> - </p> - </content> - </shape> - <shape width="218" height="30" topLeftX="672" topLeftY="142" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)">Now</span> - </p> - </content> - </shape> - <shape width="218" height="30" topLeftX="672" topLeftY="200" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20">标题</span> - </p> - </content> - </shape> - <icon width="20" height="20" topLeftX="672" topLeftY="326" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(52, 113, 252, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="672" topLeftY="355" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(52, 113, 252, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="672" topLeftY="387" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(52, 113, 252, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="672" topLeftY="416" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(52, 113, 252, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="194" height="21" topLeftX="702" topLeftY="325" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="702" topLeftY="355" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="702" topLeftY="386" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="702" topLeftY="416" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="218" height="30" topLeftX="386" topLeftY="336" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20">标题</span> - </p> - </content> - </shape> - <icon width="20" height="20" topLeftX="384" topLeftY="375" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="384" topLeftY="407" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="384" topLeftY="437" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="194" height="21" topLeftX="411" topLeftY="375" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="411" topLeftY="406" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="411" topLeftY="437" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="218" height="30" topLeftX="386" topLeftY="200" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(0, 0, 0, 1)" fontSize="20">标题</span> - </p> - </content> - </shape> - <icon width="20" height="20" topLeftX="384" topLeftY="240" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="384" topLeftY="271" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="20" height="20" topLeftX="384" topLeftY="301" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="194" height="21" topLeftX="411" topLeftY="240" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="411" topLeftY="271" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="194" height="21" topLeftX="411" topLeftY="301" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">描述信息</span> - </p> - </content> - </shape> - <shape width="218" height="63" topLeftX="672" topLeftY="241" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(52, 113, 252, 1)"> - <p> - <span color="rgba(52, 113, 252, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="294" height="367" topLeftX="50" topLeftY="121" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="Mcv6bIdsOolSpmxS3Vsct7mcnwc" width="295" height="367" topLeftX="50" topLeftY="121" alpha="0.4"> - <shadow offset="13" blur="45" color="rgba(30, 47, 88, 0.35)"/> - <crop type="rect" leftOffset="202" rightOffset="176" topOffset="563" bottomOffset="123" presetHandlers="12"/> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="VNIGbqkVgoLiefx8Cmocw8vKnrc" width="295" height="103" topLeftX="51" topLeftY="385" rotation="0" alpha="0.1"> - <crop type="rect" leftOffset="49" rightOffset="0" topOffset="0" bottomOffset="177" presetHandlers="0"/> - </img> - <shape width="254" height="30" topLeftX="68" topLeftY="142" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>挑战</p> - </content> - </shape> - <shape width="254" height="147" topLeftX="68" topLeftY="291" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" list="bullet" listStyle="circle-hollow-square" textAlign="left"> - <ul listStyle="circle-hollow-square"> - <li> - <p textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p textAlign="left">输入相关的描述信息以解释你的标题</p> - </li> - <li> - <p textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </li> - </ul> - </content> - </shape> - <shape width="88" height="21" topLeftX="101" topLeftY="196" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span fontSize="14">响应慢</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="70" topLeftY="195" iconType="iconpark/Base/save.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="88" height="21" topLeftX="234" topLeftY="196" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span fontSize="14">成本高</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="203" topLeftY="195" iconType="iconpark/Money/coupon.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="88" height="21" topLeftX="101" topLeftY="237" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span fontSize="14">运维难</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="70" topLeftY="236" iconType="iconpark/Charts/pivot-table.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="88" height="21" topLeftX="234" topLeftY="237" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span fontSize="14">收益低</span> - </p> - </content> - </shape> - <icon width="24" height="24" topLeftX="203" topLeftY="236" iconType="iconpark/Money/consume.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Pt9Kb8mKLo519qxEArtcydiln7d" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="410" height="257" topLeftX="498" topLeftY="232" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="8" angle="90" blur="24" color="rgba(30, 47, 88, 0.07)"/> - </shape> - <shape width="410" height="257" topLeftX="51" topLeftY="233" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="8" angle="90" blur="24" color="rgba(30, 47, 88, 0.07)"/> - </shape> - <shape width="410" height="63" topLeftX="51" topLeftY="153" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="410" height="30" topLeftX="51" topLeftY="113" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p list="none">成功案例</p> - </content> - </shape> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>成功案例和学习方法</p> - </content> - </shape> - <img src="K84wbnVu3oY73bxBwt4ckMzdnmh" width="393" height="239" topLeftX="507" topLeftY="241"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="8" bottomOffset="8" presetHandlers="8"/> - </img> - <img src="Ojvpb0MTNoiGXnxlHwjc7yCXnjc" width="393" height="239" topLeftX="60" topLeftY="242"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="9" bottomOffset="9" presetHandlers="8"/> - </img> - <shape width="410" height="63" topLeftX="498" topLeftY="153" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="410" height="30" topLeftX="498" topLeftY="113" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true"> - <p list="none">成功案例</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Ip4ubagmtoY28TxMEObc9qiBnyf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" bold="true"> - <p>失败案例和反思</p> - </content> - </shape> - <img src="ENS4bZEMVooy2dxzkoLc5ymEnyh" width="320" height="352" topLeftX="45" topLeftY="116" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="73" rightOffset="108" topOffset="0" bottomOffset="0" presetHandlers="12"/> - </img> - <shape width="320" height="140" topLeftX="252" topLeftY="305" rotation="0" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="XX2LbjLyfooYrax1mGzc0Oe1nxg" width="321" height="140" topLeftX="251" topLeftY="305" rotation="0" alpha="0.4"> - <shadow offset="13" blur="45" color="rgba(30, 47, 88, 0.35)"/> - <crop type="rect" leftOffset="220" rightOffset="191" topOffset="215" bottomOffset="47" presetHandlers="12"/> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </img> - <img src="WLOIbethsoI8PPxtKLtcEppdnZQ" width="195" height="120" topLeftX="377" topLeftY="314" alpha="0.1"> - <crop type="rect" leftOffset="0" rightOffset="37" topOffset="0" bottomOffset="69" presetHandlers="0"/> - </img> - <shape width="256" height="30" topLeftX="297" topLeftY="325" rotation="0" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>反思一</p> - </content> - </shape> - <shape width="256" height="63" topLeftX="297" topLeftY="362" rotation="0" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" list="none" listStyle="circle-hollow-square" textAlign="left"> - <p list="none" textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </content> - </shape> - <icon width="24" height="24" topLeftX="266" topLeftY="331" rotation="0" iconType="iconpark/Office/notes.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="320" height="140" topLeftX="596" topLeftY="305" rotation="0" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="XX2LbjLyfooYrax1mGzc0Oe1nxg" width="321" height="140" topLeftX="595" topLeftY="305" rotation="0" alpha="0.4"> - <shadow offset="13" blur="45" color="rgba(30, 47, 88, 0.35)"/> - <crop type="rect" leftOffset="220" rightOffset="191" topOffset="215" bottomOffset="47" presetHandlers="12"/> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="664" height="134" topLeftX="252" topLeftY="147" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <icon width="24" height="24" topLeftX="609" topLeftY="342" rotation="0" iconType="iconpark/Office/doc-success.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="605" height="30" topLeftX="297" topLeftY="163" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" bold="true" textAlign="left"> - <p> - <span color="linear-gradient(135deg,rgba(113, 153, 255, 1) 0%,rgba(75, 85, 255, 1) 100%)" fontSize="20">失败案例</span> - </p> - </content> - </shape> - <shape width="605" height="63" topLeftX="297" topLeftY="199" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p> - <span color="rgba(85, 85, 85, 1)">输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</span> - </p> - </content> - </shape> - <shape width="256" height="30" topLeftX="641" topLeftY="336" rotation="0" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>反思二</p> - </content> - </shape> - <shape width="256" height="63" topLeftX="641" topLeftY="373" rotation="0" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" list="none" listStyle="circle-hollow-square" textAlign="left"> - <p list="none" textAlign="left">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</p> - </content> - </shape> - <icon width="24" height="24" topLeftX="266" topLeftY="166" rotation="0" iconType="iconpark/Office/doc-fail.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="960" height="540" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(92, 127, 255, 1)"/> - </fill> - </shape> - <img src="I097brAnnoQ7MPxog13cyvYrnLd" width="960" height="540" topLeftX="0" topLeftY="0" alpha="0.4"> - <crop type="rect" leftOffset="658" rightOffset="572" topOffset="828" bottomOffset="180" presetHandlers="0"/> - </img> - <img src="SBTYbKGAHomWYcxxZwjcFtM9npA" width="507" height="414" topLeftX="-5" topLeftY="63" rotation="62" alpha="0.06"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="370" height="84" topLeftX="416" topLeftY="270" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)">输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题,输入相关的描述信息以解释你的标题</span> - </p> - </content> - </shape> - <shape width="370" height="81" topLeftX="416" topLeftY="178" type="text"> - <content textType="title" fontSize="54" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">工作技巧</span> - </p> - </content> - </shape> - <shape width="241" height="300" topLeftX="174" topLeftY="120" type="text"> - <content textType="title" fontSize="200" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Yz7KbkMIJoEAo0xxl4ecouP2nje" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="877" height="238" topLeftX="46" topLeftY="338" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <line startX="336" startY="160" endX="336" endY="262"> - <border color="rgba(221, 222, 223, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="635" startY="160" endX="635" endY="262"> - <border color="rgba(221, 222, 223, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="220" height="84" topLeftX="100" topLeftY="190" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="220" height="30" topLeftX="100" topLeftY="150" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>工作技巧</p> - </content> - </shape> - <shape width="220" height="84" topLeftX="403" topLeftY="191" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="220" height="30" topLeftX="403" topLeftY="151" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - <img src="Ml8kbWqPLoKmiIx1gXPcoPPAn4e" width="852" height="214" topLeftX="59" topLeftY="351" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="131" bottomOffset="131" presetHandlers="12"/> - </img> - <shape width="220" height="84" topLeftX="703" topLeftY="191" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="220" height="30" topLeftX="703" topLeftY="151" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - <icon width="34" height="34" topLeftX="58" topLeftY="154" iconType="iconpark/Base/config.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="34" height="34" topLeftX="353" topLeftY="154" iconType="iconpark/Base/camera.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="34" height="34" topLeftX="648" topLeftY="154" iconType="iconpark/Base/home.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 85, 85, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EZCTbfrC0o1LRJxbhhHc2wBvndd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="404" height="128" topLeftX="499" topLeftY="308" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="404" height="128" topLeftX="499" topLeftY="148" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="404" height="128" topLeftX="50" topLeftY="308" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="404" height="128" topLeftX="50" topLeftY="148" presetHandlers="12" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.51)"/> - </fill> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow offset="14" angle="90" color="rgba(0, 0, 0, 0.1)"/> - </shape> - <shape width="270" height="42" topLeftX="148" topLeftY="212" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="270" height="30" topLeftX="148" topLeftY="172" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - <shape width="418" height="48" topLeftX="50" topLeftY="40" type="text"> - <content textType="sub-headline" fontSize="32" fontFamily="思源黑体" color="rgba(0, 0, 0, 1)" bold="true"> - <p>对大家的建议</p> - </content> - </shape> - <shape width="270" height="42" topLeftX="596" topLeftY="212" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="270" height="30" topLeftX="596" topLeftY="172" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - <shape width="270" height="42" topLeftX="148" topLeftY="371" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="270" height="30" topLeftX="148" topLeftY="331" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - <img src="YZUbbdVbBoTB9Xx67IUcgTQFngb" width="58" height="58" topLeftX="523" topLeftY="175"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KKjtb4sckoQmQixkjUHcozl1nqg" width="58" height="58" topLeftX="77" topLeftY="175"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Q8wdbuRH3oFJvOxo9YpcqqSznpd" width="58" height="58" topLeftX="523" topLeftY="334"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="WmfBbHWTWoOomyxLj9OcRPZnnIH" width="58" height="58" topLeftX="77" topLeftY="334"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="270" height="42" topLeftX="596" topLeftY="371" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(85, 85, 85, 1)"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="270" height="30" topLeftX="596" topLeftY="331" type="text"> - <content textType="sub-headline" fontSize="20" fontFamily="思源黑体" bold="true"> - <p>标题</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FZOUbnaFqojl08x6hu6cWHCbnMe" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="IMzZbUGphoDASYx63swcZfHgnCc" width="421" height="262" topLeftX="0" topLeftY="285" rotation="360" alpha="0.4"> - <crop type="rect" leftOffset="127" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="421" height="63" topLeftX="50" topLeftY="376" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体"> - <p>输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题,输入相关的描述信息描述上述主题</p> - </content> - </shape> - <shape width="421" height="81" topLeftX="50" topLeftY="190" type="text"> - <content textType="title" fontSize="54" fontFamily="思源黑体" bold="true"> - <p>Thanks</p> - </content> - </shape> - <img src="IuJdbjz8KoNoBmx3sOIcsxwCnZe" width="454" height="437" topLeftX="510" topLeftY="57"> - <crop type="rect" leftOffset="0" rightOffset="178" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="JwMcbM5AToPVujxvnCScMMprn0f" width="436" height="401" topLeftX="528" topLeftY="73"> - <crop type="rect" leftOffset="0" rightOffset="252" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="72" height="18" topLeftX="78" topLeftY="40" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="50" topLeftY="38" iconType="iconpark/Abstract/api-app.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/personal--personal_resume.xml b/skills/lark-slides/assets/templates/personal--personal_resume.xml deleted file mode 100644 index ede96da70..000000000 --- a/skills/lark-slides/assets/templates/personal--personal_resume.xml +++ /dev/null @@ -1,2047 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>个人简历 - - - - - -
- - - - - - - - - - - - - - - - -

- Tel:123456789 -

-
-
- - -

- Mail: - xxx.com -

-
-
- - -

- - PERSONAL - -

-
-
- - -

- - PROFILE - -

-
-
- - -

- - 我|的|个|人|简|历 - -

-
-
- - -

- 关于你的一些介绍文案,关于你的一些介绍文案,关于你的一些介绍文案,关于你的一些介绍文案 -

-
-
- - - - - - - - - - - - - - - - - - - - - - -

- 2026 -

-

- / -

-

- 2027 -

-
-
- - - - - - - - - - - - - - - - - - - - - - -

- Name:xx -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 01 -

-
-
- - - - - - - -

- 02 -

-
-
- - - - - - - -

- 03 -

-
-
- - - - - - - -

- 04 -

-
-
- - - - - - - - - - - - - - -

2026

-

/

-

2027

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

-
-
- - -

未来规划

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

-
-
- - -

项目展示

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

-
-
- - -

个人经历

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

-
-
- - -

自我介绍

-
-
- - -

CONTENTS

-
-
- - -

PERSONAL PROFILE

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

自我介绍

-
-
- - -

01

-
-
- - -

PERSONAL PROFILE

-
-
- - -

2026

-

/

-

2027

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

自我介绍

-
-
- - -

2026

-

/

-

2027

-
-
- - - - - - - -
    -
  • -

    - 性别:女 -

    -
  • -
  • -

    - 年龄:24 -

    -
  • -
  • -

    - 学历:硕士 -

    -
  • -
  • -

    - 毕业学校:某大学 -

    -
  • -
-
-
- - -

- - 基本信息 - -

-
-
- - - - - -
    -
  • -

    - - Tel:123456789 - -

    -
  • -
  • -

    - - Mail: - - - xxx.com - -

    -
  • -
  • -

    - - Blog: - - - xxx.com - -

    -
  • -
  • -

    - - GitHub:xxx.com - -

    -
  • -
-
-
- - -
    -
  • -

    求职意向:工程师

    -
  • -
  • -

    到岗时间:随时

    -
  • -
  • -

    - 工作地点:北京 -

    -
  • -
  • -

    - 期望薪资:面议 -

    -
  • -
-
-
- - -

- - 求职意向 - -

-
-
- - - - - -
    -
  • -

    2020.09 - 2024.06 某大学 xxx专业(本科)

    -
  • -
  • -

    2020.09 - 2024.06 某大学 xxx专业(本科)

    -
  • -
  • -

    2020.09 - 2024.06 某大学 xxx专业(本科)

    -
  • -
  • -

    2020.09 - 2024.06 某大学 xxx专业(本科)

    -
  • -
-
-
- - -

- - 教育背景 - -

-
-
- - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - -

- -

-
-
- - - - - - - -

- -

-
-
- - - - - - - -

- -

-
-
- - - - - - - - -
    -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
-
-
- - -
    -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
-
-
- - -
    -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
-
-
- - -

技能关键词三

-
-
- - -

技能关键词二

-
-
- - -

技能关键词一

-
-
- - -

2026

-

/

-

2027

-
-
- - -

个人技能

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

个人经历

-
-
- - -

02

-
-
- - -

PERSONAL PROFILE

-
-
- - -

2026

-

/

-

2027

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2026

-

/

-

2027

-
-
- - -

项目经历

-
-
- - -

项目名称一(2025.8-至今)

-
-
- - - - - -
    -
  • -

    - 项目简介:描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。 -

    -
  • -
  • -

    - 岗位职责:描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。 -

    -
  • -
-
-
- - - - - - - - - - - - - - - - - -

项目名称二(2025.8-至今)

-
-
- - - - - -
    -
  • -

    项目简介:描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

    -
  • -
  • -

    岗位职责:描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。

    -
  • -
-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2026

-

/

-

2027

-
-
- - -

证书荣誉

-
-
- - -

《xx荣誉》

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
- - -

《xx荣誉》

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
- - -

《xx荣誉》

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
- - -

《xx荣誉》

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

项目展示

-
-
- - -

03

-
-
- - -

PERSONAL PROFILE

-
-
- - -

2026

-

/

-

2027

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

项目背景

-
-
- - -

2026

-

/

-

2027

-
-
- - -

背景关键词四

-
-
- - - - - -

背景关键词三

-
-
- - - - - -

背景关键词二

-
-
- - - - - -

背景关键词一

-
-
- - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

关键词

-
-
- - -

描述相关的信息以解释你的标题。

-
-
- - -

策略关键词三

-
-
- - -

策略关键词二

-
-
- - -

策略关键词一

-
-
- - -

2026

-

/

-

2027

-
-
- - -

产品策略

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2026

-

/

-

2027

-
-
- - -

产品展示

-
-
- - -

关键词三

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
- - -

关键词二

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
- - -

关键词一

-
-
- - -

描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2026

-

/

-

2027

-
-
- - -

产品数据

-
-
- - -

数据字段名称

-
-
- - -

90%

-
-
- - - - - - - - - - - - -

数据字段名称

-
-
- - -

116%

-
-
- - - - - - - - -

- 描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。 -

-
-
- - - - - - - - -

- 描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。 -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

未来规划

-
-
- - -

04

-
-
- - -

PERSONAL PROFILE

-
-
- - -

2026

-

/

-

2027

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- 短期规划 -

-
-
- - - - - - - - - - -

长期规划

-
-
- - - - - - - - - - - - - - - - -

2027

-
-
- - -
    -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
-
-
- - -

2026

-
-
- - -
    -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
  • -

    描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容

    -
  • -
-
-
- - -

未来规划

-
-
- - -

2026

-

/

-

2027

-
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Thank You

-
-
- - -

PERSONAL PROFILE

-
-
- - -

2026

-

/

-

2027

-
-
-
- - - -
- \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/personal--promotion_defense.xml b/skills/lark-slides/assets/templates/personal--promotion_defense.xml deleted file mode 100644 index 2b7e1df99..000000000 --- a/skills/lark-slides/assets/templates/personal--promotion_defense.xml +++ /dev/null @@ -1,1099 +0,0 @@ - - 晋级答辩 - - - - <headline fontColor="#000000FF" fontSize="36"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </style> - <data> - <shape width="324" height="208" topLeftX="36" topLeftY="249" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="75" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.1" textAlign="left"> - <p lineSpacing="multiple:1.1"> - <span color="rgba(255, 255, 255, 1)" fontSize="75" bold="false">晋升</span> - </p> - <p lineSpacing="multiple:1.1"> - <span color="rgba(255, 255, 255, 1)" fontSize="75" bold="false">答辩报告</span> - </p> - </content> - </shape> - <shape width="253" height="56" topLeftX="41" topLeftY="448" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">PROMOTION REPORT</span> - </p> - </content> - </shape> - <shape width="216" height="38" topLeftX="36" topLeftY="35" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">演讲人:李天</span> - </p> - </content> - </shape> - <shape width="216" height="38" topLeftX="264" topLeftY="35" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">目标岗位:XXX</span> - </p> - </content> - </shape> - <img src="UOS9brd20oEbUSxjPpbcdzTMnhg" width="324" height="540" topLeftX="636" topLeftY="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content> - <p/> - </content> - </note> - </slide> - <slide> - <style/> - <data> - <img src="OOiyb931ToebAWxB5ytcbmgvnTg" width="216" height="540" topLeftX="0" topLeftY="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="133" height="80" topLeftX="318" topLeftY="121" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(74, 58, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(74, 58, 255, 1)" fontSize="40">目录</span> - </strong> - </p> - </content> - </shape> - <shape width="426" height="80" topLeftX="428" topLeftY="121" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="40">CONTENT</span> - </strong> - </p> - </content> - </shape> - <shape width="248" height="62" topLeftX="335" topLeftY="271" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑</span> - </p> - </content> - </shape> - <shape width="248" height="47" topLeftX="335" topLeftY="235" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">01 个人简介</span> - </strong> - </p> - </content> - </shape> - <shape width="248" height="62" topLeftX="620" topLeftY="271" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑</span> - </p> - </content> - </shape> - <shape width="248" height="47" topLeftX="620" topLeftY="235" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">02 工作经验</span> - </strong> - </p> - </content> - </shape> - <shape width="248" height="62" topLeftX="335" topLeftY="393" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑</span> - </p> - </content> - </shape> - <shape width="248" height="47" topLeftX="335" topLeftY="357" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">03 认知与评价</span> - </strong> - </p> - </content> - </shape> - <shape width="248" height="62" topLeftX="620" topLeftY="393" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <span fontSize="14">请在此处编辑文字请在此处编辑文字请在此处编辑</span> - </p> - </content> - </shape> - <shape width="248" height="47" topLeftX="620" topLeftY="357" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="18">04 未来规划</span> - </strong> - </p> - </content> - </shape> - <shape width="135" height="81" topLeftX="318" topLeftY="121" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" fontFamily="undefined" color="rgba(74, 58, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="center" autoFit="shape-auto-fit"> - <p>目录</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="296" height="113" topLeftX="664" topLeftY="427" type="rect"> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </shape> - <shape width="80" height="37" topLeftX="87" topLeftY="275" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">年龄</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="37" topLeftX="87" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">民族</span> - </strong> - </p> - </content> - </shape> - <shape width="140" height="37" topLeftX="298" topLeftY="275" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">最高学历</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="48" topLeftX="87" topLeftY="345" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">籍贯</span> - </strong> - </p> - </content> - </shape> - <shape width="140" height="37" topLeftX="298" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="14">毕业学校</span> - </strong> - </p> - </content> - </shape> - <shape width="296" height="430" topLeftX="664" topLeftY="0" type="rect"> - <fill> - <fillColor color="rgba(74, 58, 255, 1)"/> - </fill> - </shape> - <img src="InFdbMXOeo5VHCx1BYYcHBzZnTf" width="296" height="430" topLeftX="664" topLeftY="0" exposure="24" temperature="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="5" bottomOffset="5"/> - </img> - <shape width="120" height="37" topLeftX="393" topLeftY="314" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" lineSpacing="multiple:1.2"> - <p>XXX 大学</p> - </content> - </shape> - <shape width="120" height="37" topLeftX="393" topLeftY="275" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" lineSpacing="multiple:1.2"> - <p>硕士</p> - </content> - </shape> - <shape width="120" height="37" topLeftX="156" topLeftY="351" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" lineSpacing="multiple:1.2"> - <p>山东</p> - </content> - </shape> - <shape width="120" height="37" topLeftX="156" topLeftY="314" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" lineSpacing="multiple:1.2"> - <p>汉族</p> - </content> - </shape> - <shape width="120" height="37" topLeftX="156" topLeftY="275" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" lineSpacing="multiple:1.2"> - <p>36岁</p> - </content> - </shape> - <shape width="393" height="56" topLeftX="87" topLeftY="182" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="416" height="69" topLeftX="87" topLeftY="116" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="36">李天</span> - </strong> - </p> - </content> - </shape> - <img src="T8zebebNSocayLxKjYicyzNFnLc" width="224" height="223" topLeftX="552" topLeftY="316" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="114" height="44" topLeftX="26" topLeftY="25" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="true" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p>个人简介</p> - </content> - </shape> - <shape width="129" height="44" topLeftX="101" topLeftY="25" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" fontFamily="undefined" color="rgba(31, 35, 41, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit" wrap="false"> - <p>PersonalProfile</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="450" height="44" topLeftX="98" topLeftY="26" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">Work Experience</span> - </p> - </content> - </shape> - <shape width="88" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作经验</span> - </strong> - </p> - </content> - </shape> - <shape width="388" height="83" topLeftX="56" topLeftY="162" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="196" height="68" topLeftX="55" topLeftY="98" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="32">工作经历</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="44" topLeftX="58" topLeftY="355" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="16">工作单位 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="62" topLeftX="58" topLeftY="384" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="210" height="44" topLeftX="365" topLeftY="355" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="16">工作单位 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="62" topLeftX="365" topLeftY="384" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="671" topLeftY="355" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="16">工作单位 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="210" height="62" topLeftX="671" topLeftY="384" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(43, 47, 54, 1)"> - <p> - <span color="rgba(43, 47, 54, 1)" fontSize="14">描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="843" height="26" topLeftX="62" topLeftY="318" presetHandlers="120" type="round-rect"> - <fill> - <fillColor color="rgba(74, 58, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="68" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="374" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="18" height="17" topLeftX="680" topLeftY="323" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="27" height="26" topLeftX="192" topLeftY="318" alpha="0.57" iconType="iconpark/Arrows/right.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="27" height="26" topLeftX="497" topLeftY="318" alpha="0.57" iconType="iconpark/Arrows/right.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="9" height="9" topLeftX="250" topLeftY="96" rotation="90" alpha="0.25" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(74, 58, 255, 1)" width="48" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="51" height="3" topLeftX="399" topLeftY="167" rotation="90" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </shape> - <shape width="2" height="2" topLeftX="424" topLeftY="142" rotation="90" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 70, 255, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="HprTbjNtso2te1x1aeTcPX20nf3" width="6" height="16" topLeftX="365" topLeftY="153"> - <crop type="rect" leftOffset="5" rightOffset="5" topOffset="0" bottomOffset="0"/> - </img> - <img src="RobvbBHEuoLeC0xykEOcZLyxnvc" width="12" height="32" topLeftX="249" topLeftY="234"> - <crop type="rect" leftOffset="10" rightOffset="10" topOffset="0" bottomOffset="0"/> - </img> - <img src="OnGsbbL9WoJEaXxSC2fcAbe0ntd" width="45" height="45" topLeftX="-137" topLeftY="450" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="D6xzbqzsPoerzOxZ4LScWdqqnqh" width="45" height="45" topLeftX="-183" topLeftY="495" rotation="180"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="OEVabGAm4ovOkBxVEm2crnGonsf" width="45" height="45" topLeftX="-137" topLeftY="495" rotation="180"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="TAtRbqzKRo7KDdxxKUQclqpgnHc" width="330" height="330" topLeftX="69" topLeftY="118"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="165"/> - <border color="rgba(85, 70, 255, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="450" height="44" topLeftX="98" topLeftY="26" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">Work Experience</span> - </p> - </content> - </shape> - <shape width="88" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作经验</span> - </strong> - </p> - </content> - </shape> - <shape width="346" height="74" topLeftX="521" topLeftY="248" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="346" height="74" topLeftX="521" topLeftY="352" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="321" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作成果</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="214" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作内容</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="108" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">20</span> - <span fontSize="16">XX.</span> - <span fontSize="16">06 - 20</span> - <span fontSize="16">XX</span> - <span fontSize="16">.09</span> - </p> - </content> - </shape> - <shape width="265" height="64" topLeftX="521" topLeftY="140" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">XXX 公司</span> - </strong> - </p> - </content> - </shape> - <shape width="229" height="58" topLeftX="677" topLeftY="145" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(85, 70, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(85, 70, 255, 1)" fontSize="28">XXX 职位</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="NBfrbjlPPowUJDxiOgdcEopnn1e" width="45" height="45" topLeftX="0" topLeftY="225" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="N017bZZUqorDelxO9Etc9SZan02" width="45" height="45" topLeftX="45" topLeftY="225" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="TeoNbF4dSop7Dwxf3tTcb9yenOc" width="45" height="45" topLeftX="0" topLeftY="181"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="9" height="9" topLeftX="232" topLeftY="62" rotation="90" alpha="0.25" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(74, 58, 255, 1)" width="48" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="68" height="3" topLeftX="371" topLeftY="32" rotation="90" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </shape> - <shape width="4" height="4" topLeftX="403" topLeftY="15" rotation="90" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 70, 255, 1)" width="10" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="T5p7bfT95ohYBNxH2F6c72QKnWf" width="6" height="16" topLeftX="346" topLeftY="57"> - <crop type="rect" leftOffset="5" rightOffset="5" topOffset="0" bottomOffset="0"/> - </img> - <img src="AfoObqdupob16RxMaJRcyo6Inic" width="12" height="22" topLeftX="231" topLeftY="0.17"> - <crop type="rect" leftOffset="10" rightOffset="10" topOffset="10" bottomOffset="0"/> - </img> - <img src="UWCjblpwzoiSndxEu2xccMosnBe" width="12" height="32" topLeftX="231" topLeftY="219"> - <crop type="rect" leftOffset="10" rightOffset="10" topOffset="0" bottomOffset="0"/> - </img> - <img src="YzOebhxZCobLClxUYs6c5HQvn3f" width="330" height="330" topLeftX="69" topLeftY="118" exposure="18" contrast="9" saturation="1" temperature="-38"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="82" bottomOffset="83" presetHandlers="165"/> - <border color="rgba(85, 70, 255, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="450" height="44" topLeftX="98" topLeftY="26" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">Work Experience</span> - </p> - </content> - </shape> - <shape width="88" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作经验</span> - </strong> - </p> - </content> - </shape> - <shape width="346" height="74" topLeftX="521" topLeftY="248" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="346" height="74" topLeftX="521" topLeftY="352" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="321" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作成果</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="214" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作内容</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="108" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>20XX.06 - 20XX.09</p> - </content> - </shape> - <shape width="265" height="64" topLeftX="521" topLeftY="140" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">XXX 公司</span> - </strong> - </p> - </content> - </shape> - <shape width="229" height="58" topLeftX="677" topLeftY="145" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(85, 70, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(85, 70, 255, 1)" fontSize="28">XXX 职位</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="9" height="9" topLeftX="701" topLeftY="60" rotation="90" alpha="0.25" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(74, 58, 255, 1)" width="48" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="33" height="6" topLeftX="802" topLeftY="12" rotation="90" presetHandlers="0" type="round-rect"> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </shape> - <shape width="4" height="4" topLeftX="816" topLeftY="29" rotation="90" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(85, 70, 255, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="DZlkbobKUogw8HxRQmrc3fx3nKN" width="24" height="44" topLeftX="466" topLeftY="-1"> - <crop type="rect" leftOffset="19" rightOffset="21" topOffset="19" bottomOffset="0"/> - </img> - <img src="MUTvbkuy6oR7PExbw62c2pHGnNf" width="45" height="45" topLeftX="316" topLeftY="360" rotation="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="YQ5tbnfcnodAd8xhrTccqFNBnyc" width="45" height="45" topLeftX="271" topLeftY="404" rotation="180"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="XlOwbR4F9o6uNRxM4CXcy1Tlnoh" width="45" height="45" topLeftX="271" topLeftY="360" rotation="270"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="GbJzbWMtLo6Gk7x5L7bc1EK9nPe" width="330" height="330" topLeftX="69" topLeftY="118"> - <crop type="rect" leftOffset="42" rightOffset="15" topOffset="57" bottomOffset="0" presetHandlers="165"/> - <border color="rgba(85, 70, 255, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </img> - <shape width="450" height="44" topLeftX="98" topLeftY="26" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">Work Experience</span> - </p> - </content> - </shape> - <shape width="88" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作经验</span> - </strong> - </p> - </content> - </shape> - <shape width="346" height="74" topLeftX="521" topLeftY="248" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="346" height="74" topLeftX="521" topLeftY="352" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="321" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作成果</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="214" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">工作内容</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="44" topLeftX="521" topLeftY="108" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>20XX.06 - 20XX.09</p> - </content> - </shape> - <shape width="265" height="64" topLeftX="521" topLeftY="140" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span fontSize="32">XXX 公司</span> - </strong> - </p> - </content> - </shape> - <shape width="229" height="58" topLeftX="677" topLeftY="145" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(85, 70, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(85, 70, 255, 1)" fontSize="28">XXX 职位</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </style> - <data> - <shape width="450" height="44" topLeftX="112" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">Cognition and Evaluation</span> - </p> - </content> - </shape> - <shape width="102" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">认知与评价</span> - </strong> - </p> - </content> - </shape> - <shape width="392" height="68" topLeftX="23" topLeftY="75" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">岗位认知</span> - </strong> - </p> - </content> - </shape> - <shape width="380" height="56" topLeftX="187" topLeftY="84" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="150" height="150" topLeftX="346" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="391" topLeftY="240" iconType="iconpark/Charts/chart-proportion.svg"> - <border color="rgba(74, 58, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="150" height="150" topLeftX="69" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="114" topLeftY="240" iconType="iconpark/Office/book-one.svg"> - <border color="rgba(74, 58, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="150" height="150" topLeftX="623" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="668" topLeftY="240" iconType="iconpark/Office/new-picture.svg"> - <border color="rgba(74, 58, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="202" height="110" topLeftX="43" topLeftY="398" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="43" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)" fontSize="18">关键</span> - <span color="rgba(255, 255, 255, 1)" fontSize="18">点 #1</span> - </p> - </content> - </shape> - <shape width="202" height="110" topLeftX="320" topLeftY="398" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="320" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)" fontSize="18">关键</span> - <span color="rgba(255, 255, 255, 1)" fontSize="18">点 #1</span> - </p> - </content> - </shape> - <shape width="202" height="110" topLeftX="597" topLeftY="398" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="597" topLeftY="361" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)" fontSize="18">关键</span> - <span color="rgba(255, 255, 255, 1)" fontSize="18">点 #1</span> - </p> - </content> - </shape> - <img src="JVa3bMiqCojIrsx4F56cJwNBn9f" width="90" height="90" topLeftX="870" topLeftY="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="Dgz0bsmonob9Jfxp1Xwc2z1knMg" width="90" height="90" topLeftX="870" topLeftY="180" rotation="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="SBgQbcnR2o7vi5x5xDNclCaqnJb" width="90" height="90" topLeftX="870" topLeftY="90"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="H4w5b6KcxosvwuxlLGCcL7AlnXd" width="90" height="90" topLeftX="780" topLeftY="0" rotation="180"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(85, 70, 255, 1)"/> - </fill> - </style> - <data> - <shape width="450" height="44" topLeftX="112" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">Cognition and Evaluation</span> - </p> - </content> - </shape> - <shape width="102" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">认知与评价</span> - </strong> - </p> - </content> - </shape> - <shape width="392" height="68" topLeftX="23" topLeftY="75" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">自我评价</span> - </strong> - </p> - </content> - </shape> - <img src="TTQdbNekhoZ8SLxDaZdcgjmXnmc" width="416" height="428" topLeftX="544" topLeftY="112"> - <crop type="rect" leftOffset="134" rightOffset="134" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="XRuDbxFzto8F4Ax1xG2cJMiDnBc" width="224" height="223" topLeftX="432" topLeftY="0.26" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="KzLUb3wtqoTeVYxMr2ic86lYnTe" width="112" height="112" topLeftX="848" topLeftY="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="374" height="92" topLeftX="26" topLeftY="143" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="120" height="42" topLeftX="38" topLeftY="349" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(74, 58, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(74, 58, 255, 1)" fontSize="16">标签 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="42" topLeftX="185" topLeftY="349" type="slides-full-round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(74, 58, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(74, 58, 255, 1)" fontSize="16">标签 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="374" height="92" topLeftX="26" topLeftY="238" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="450" height="44" topLeftX="98" topLeftY="26" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="16">Future Planning</span> - </p> - </content> - </shape> - <shape width="88" height="44" topLeftX="26" topLeftY="26" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="16">未来规划</span> - </strong> - </p> - </content> - </shape> - <line startX="365" startY="206" endX="699" endY="204" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="365" startY="362" endX="699" endY="362" alpha="0.15"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="343" height="74" topLeftX="360" topLeftY="414" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(43, 47, 54, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="351" height="44" topLeftX="360" topLeftY="380" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">发挥兴趣与长处,提升团队氛围</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="249" topLeftY="398" type="slides-block-arc"> - <fill> - <fillColor color="rgba(74, 58, 255, 1)"/> - </fill> - </shape> - <shape width="72" height="68" topLeftX="282" topLeftY="380" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="32">03</span> - </strong> - </p> - </content> - </shape> - <shape width="343" height="74" topLeftX="360" topLeftY="268" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(43, 47, 54, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="215" height="44" topLeftX="360" topLeftY="237" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">提升沟通效率</span> - </strong> - </p> - </content> - </shape> - <shape width="71" height="74" topLeftX="249" topLeftY="257" type="slides-block-arc"> - <fill> - <fillColor color="rgba(74, 58, 255, 1)"/> - </fill> - </shape> - <shape width="72" height="68" topLeftX="282" topLeftY="237" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="32">02</span> - </strong> - </p> - </content> - </shape> - <shape width="351" height="74" topLeftX="355" topLeftY="114" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(43, 47, 54, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="351" height="44" topLeftX="355" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="left"> - <p> - <strong> - <span color="rgba(31, 35, 41, 1)" fontSize="16">积累经验,形成沉淀</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="74" topLeftX="249" topLeftY="100" type="slides-block-arc"> - <fill> - <fillColor color="rgba(74, 58, 255, 1)"/> - </fill> - </shape> - <shape width="69" height="68" topLeftX="285" topLeftY="84" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true"> - <p> - <strong> - <span fontSize="32">01</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="JNbobxKzsoiQydxNwSocCGGXn61" width="433" height="541" topLeftX="0" topLeftY="0"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="433" height="140" topLeftX="527" topLeftY="352" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(74, 58, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(74, 58, 255, 1)" fontSize="80">谢谢观赏</span> - </strong> - </p> - </content> - </shape> - <shape width="386" height="56" topLeftX="574" topLeftY="309" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p> - <span fontSize="24">THANK YOU</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/personal--promotion_report.xml b/skills/lark-slides/assets/templates/personal--promotion_report.xml deleted file mode 100644 index fd70d236d..000000000 --- a/skills/lark-slides/assets/templates/personal--promotion_report.xml +++ /dev/null @@ -1,1039 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>职位晋升汇报 - - - - - - - <headline fontColor="rgba(255, 255, 255, 1)"/> - <sub-headline fontColor="rgba(255, 255, 255, 1)" fontSize="16"/> - <body fontColor="rgba(255, 255, 255, 1)" fontSize="14"/> - <caption fontColor="rgba(255, 255, 255, 1)"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <shape width="152" height="386" topLeftX="673" topLeftY="85" rotation="45" alpha="0.5" type="slides-full-round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Pjxfb38TMocH5exF6NhctB9cneg" width="281" height="280" topLeftX="638" topLeftY="221" rotation="69"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="OCyQbv6jsozDmNxxLP3coVWBnJh" width="258" height="260" topLeftX="565" topLeftY="27" rotation="8"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="131" height="131" topLeftX="814" topLeftY="376" rotation="285"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.36" bottomOffset="0.36" presetHandlers="0"/> - </img> - <img src="CkSDbsItwooxnSxkx9dcGcOinTe" width="131" height="128" topLeftX="787" topLeftY="45" rotation="344"> - <crop type="rect" leftOffset="20" rightOffset="27" topOffset="36" bottomOffset="13" presetHandlers="0"/> - </img> - <img src="Gtuybw38moZuM1xew9kcFwDVnde" width="92" height="91" topLeftX="582" topLeftY="387"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="SbyJb8XExolUZpxTlVVcXJtnncr" width="59" height="59" topLeftX="826" topLeftY="196"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="LGThb65tmoqfJExzmZEciVaDnUc" width="131" height="131" topLeftX="567" topLeftY="222" rotation="250"> - <crop type="rect" leftOffset="0.19" rightOffset="0.19" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="F1hobT5rOoXjgAxmK1sc3zm7nGe" width="74" height="74" topLeftX="736" topLeftY="11" rotation="330"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="470" height="128" topLeftX="53" topLeftY="328" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span fontSize="72">职位</span> - <span color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)" fontSize="72">晋升</span> - <span color="rgba(255, 255, 255, 1)" fontSize="72">汇报</span> - </p> - </content> - </shape> - <shape width="470" height="47" topLeftX="53" topLeftY="304" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Promotion Report</span> - </p> - </content> - </shape> - <shape width="470" height="47" topLeftX="53" topLeftY="432" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">2026-07-12</span> - </p> - </content> - </shape> - <shape width="152" height="38" topLeftX="53" topLeftY="47" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">演讲人:李天</span> - </p> - </content> - </shape> - <shape width="152" height="38" topLeftX="205" topLeftY="47" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">目标岗位:XXX</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <img src="CkSDbsItwooxnSxkx9dcGcOinTe" width="282" height="177" topLeftX="678" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="105" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="257" height="168" topLeftX="0" topLeftY="372"> - <crop type="rect" leftOffset="11" rightOffset="0" topOffset="0.74" bottomOffset="99" presetHandlers="0"/> - </img> - <shape width="125" height="77" topLeftX="165" topLeftY="100" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)" bold="true"> - <p> - <span color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)">目录</span> - </p> - </content> - </shape> - <shape width="328" height="77" topLeftX="257" topLeftY="100" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <span color="rgba(255, 255, 255, 1)">CONTENTS</span> - </p> - </content> - </shape> - <shape width="125" height="41" topLeftX="201" topLeftY="203" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">基本情况</span> - </strong> - </p> - </content> - </shape> - <shape width="125" height="41" topLeftX="201" topLeftY="254" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">晋升优势</span> - </strong> - </p> - </content> - </shape> - <shape width="140" height="41" topLeftX="201" topLeftY="305" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">岗位认知</span> - </strong> - </p> - </content> - </shape> - <shape width="158" height="41" topLeftX="201" topLeftY="356" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">未来规划</span> - </strong> - </p> - </content> - </shape> - <shape width="385" height="41" topLeftX="332" topLeftY="359" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="184" topLeftY="372" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <border color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="385" height="41" topLeftX="332" topLeftY="308" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="184" topLeftY="321" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <border color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="385" height="41" topLeftX="332" topLeftY="257" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="184" topLeftY="271" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <border color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="385" height="41" topLeftX="332" topLeftY="206" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>单击此处输入关于主题的简单介绍,为了更好的演示效果</p> - </content> - </shape> - <shape width="11" height="11" topLeftX="184" topLeftY="220" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <border color="linear-gradient(90deg,rgba(121, 162, 255, 1) 0%,rgba(222, 189, 255, 1) 100%)" width="4" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="624" startY="139" endX="499" endY="139" alpha="0.6"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <shape width="716" height="230" topLeftX="125" topLeftY="148" alpha="0.5" type="slides-full-round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Gtuybw38moZuM1xew9kcFwDVnde" width="285" height="284" topLeftX="97" topLeftY="121"> - <crop type="rect" leftOffset="0.29" rightOffset="0.29" topOffset="0" bottomOffset="0"/> - </img> - <shape width="404" height="68" topLeftX="382" topLeftY="260" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="404" height="77" topLeftX="382" topLeftY="193" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">基本情况</span> - </strong> - </p> - </content> - </shape> - <shape width="124" height="128" topLeftX="178" topLeftY="200" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="110" height="41" topLeftX="98" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Basic Status</span> - </p> - </content> - </shape> - <shape width="87" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">基本情况</span> - </strong> - </p> - </content> - </shape> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="164" height="92" topLeftX="709" topLeftY="448"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="72" presetHandlers="0"/> - </img> - <shape width="120" height="37" topLeftX="360" topLeftY="339" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p> - <span color="rgba(255, 255, 255, 1)">XXX 大学</span> - </p> - </content> - </shape> - <shape width="120" height="37" topLeftX="360" topLeftY="301" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p> - <span color="rgba(255, 255, 255, 1)">硕士</span> - </p> - </content> - </shape> - <shape width="120" height="37" topLeftX="143" topLeftY="376" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p> - <span color="rgba(255, 255, 255, 1)">山东</span> - </p> - </content> - </shape> - <shape width="120" height="37" topLeftX="143" topLeftY="339" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p> - <span color="rgba(255, 255, 255, 1)">汉族</span> - </p> - </content> - </shape> - <shape width="120" height="37" topLeftX="143" topLeftY="301" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p> - <span color="rgba(255, 255, 255, 1)">36岁</span> - </p> - </content> - </shape> - <shape width="325" height="74" topLeftX="75" topLeftY="197" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。现在就开始打字吧。</span> - </p> - </content> - </shape> - <shape width="416" height="74" topLeftX="75" topLeftY="131" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="36">李天</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="37" topLeftX="75" topLeftY="301" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">年龄</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="37" topLeftX="75" topLeftY="339" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">民族</span> - </strong> - </p> - </content> - </shape> - <shape width="81" height="37" topLeftX="265" topLeftY="301" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">最高学历</span> - </strong> - </p> - </content> - </shape> - <shape width="80" height="48" topLeftX="75" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">籍贯</span> - </strong> - </p> - </content> - </shape> - <shape width="81" height="37" topLeftX="265" topLeftY="339" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">毕业学校</span> - </strong> - </p> - </content> - </shape> - <img src="UcZQbVek7ojuEGx4PBtcKh2Knpf" width="310" height="310" topLeftX="525" topLeftY="115"> - <crop type="rect" leftOffset="0.66" rightOffset="0.66" topOffset="0" bottomOffset="0" presetHandlers="216"/> - </img> - <img src="DviYbH0NJoReMUxZralchw1FnGd" width="284" height="141" topLeftX="567" topLeftY="0" flipX="true"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="141" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="110" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Basic Status</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">基本情况</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="164" height="81" topLeftX="748" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="82" bottomOffset="0.45" presetHandlers="0"/> - </img> - <img src="DviYbH0NJoReMUxZralchw1FnGd" width="238" height="118" topLeftX="50" topLeftY="422" flipY="true"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="118" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <shape width="716" height="230" topLeftX="125" topLeftY="148" alpha="0.5" type="slides-full-round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Gtuybw38moZuM1xew9kcFwDVnde" width="285" height="284" topLeftX="97" topLeftY="121"> - <crop type="rect" leftOffset="0.29" rightOffset="0.29" topOffset="0" bottomOffset="0"/> - </img> - <shape width="404" height="68" topLeftX="382" topLeftY="260" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="404" height="77" topLeftX="382" topLeftY="193" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">晋升优势</span> - </strong> - </p> - </content> - </shape> - <shape width="124" height="128" topLeftX="178" topLeftY="200" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="110" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Advantages</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">晋升优势</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - <shape width="333" height="62" topLeftX="35" topLeftY="176" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</p> - </content> - </shape> - <shape width="404" height="77" topLeftX="35" topLeftY="109" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p>核心能力</p> - </content> - </shape> - <img src="DPwGba8nVoEKBMx66cfc3ueindd" width="98" height="97" topLeftX="828" topLeftY="321" rotation="336"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="EmvubDGNHo8DPTxUGzTc7RNnnu5" width="147" height="92" topLeftX="840" topLeftY="28" rotation="270"> - <crop type="rect" leftOffset="0" rightOffset="16" topOffset="0" bottomOffset="72" presetHandlers="0"/> - </img> - <img src="LvjMbSBWyoJAWbxLfx7cMd9snMh" width="264" height="175" topLeftX="-44" topLeftY="320" rotation="90" flipX="true" flipY="true"> - <crop type="rect" leftOffset="20" rightOffset="0" topOffset="99" bottomOffset="8" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="110" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Advantages</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">晋升优势</span> - </strong> - </p> - </content> - </shape> - <shape width="884" height="411" topLeftX="38" topLeftY="84" presetHandlers="16" alpha="0.4" type="round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Iu39bQRg9odR29xxCn0ceyoanph" width="278" height="368" topLeftX="60" topLeftY="106"> - <crop type="rect" leftOffset="45" rightOffset="45" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="482" height="62" topLeftX="382" topLeftY="114" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p lineSpacing="multiple:1" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="42">业务能力</span> - </strong> - </p> - </content> - </shape> - <shape width="176" height="41" topLeftX="382" topLeftY="191" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">Business capability</span> - </p> - </content> - </shape> - <shape width="430" height="142" topLeftX="382" topLeftY="237" alpha="0.65" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - <p lineSpacing="multiple:1.7" letterSpacing="1"/> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="164" height="81" topLeftX="748" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="82" bottomOffset="0.45" presetHandlers="0"/> - </img> - <img src="DviYbH0NJoReMUxZralchw1FnGd" width="223" height="111" topLeftX="381" topLeftY="429" flipY="true"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="111" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="132" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Advantages</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">晋升优势</span> - </strong> - </p> - </content> - </shape> - <shape width="232" height="74" topLeftX="76" topLeftY="174" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.651)" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 0.651)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="144" height="44" topLeftX="164" topLeftY="134" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="right"> - <p>关键点 #1</p> - </content> - </shape> - <shape width="144" height="44" topLeftX="408" topLeftY="371" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>关键点 #2</p> - </content> - </shape> - <shape width="232" height="74" topLeftX="636" topLeftY="174" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.651)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.651)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="144" height="44" topLeftX="636" topLeftY="134" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>关键点 #3</p> - </content> - </shape> - <shape width="285" height="74" topLeftX="337" topLeftY="406" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 0.651)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 0.651)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="205" height="205" topLeftX="376" topLeftY="124" alpha="0.4" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="72" height="72" topLeftX="350" topLeftY="134" presetHandlers="37" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(29, 64, 126, 1)" bold="true"> - <p> - <strong> - <span color="rgba(29, 64, 126, 1)" fontSize="18">01</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="442" topLeftY="282" presetHandlers="37" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(29, 64, 126, 1)" bold="true"> - <p> - <strong> - <span color="rgba(29, 64, 126, 1)" fontSize="18">02</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="538" topLeftY="137" presetHandlers="37" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(29, 64, 126, 1)" bold="true"> - <p> - <strong> - <span color="rgba(29, 64, 126, 1)" fontSize="18">03</span> - </strong> - </p> - </content> - </shape> - <shape width="144" height="44" topLeftX="406" topLeftY="204" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>团队建设</p> - </content> - </shape> - <icon width="64" height="64" topLeftX="263" topLeftY="299" rotation="60" iconType="iconpark/Arrows/double-right.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="64" height="64" topLeftX="634" topLeftY="299" rotation="300" iconType="iconpark/Arrows/double-right.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <shape width="716" height="230" topLeftX="125" topLeftY="148" alpha="0.5" type="slides-full-round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Gtuybw38moZuM1xew9kcFwDVnde" width="285" height="284" topLeftX="97" topLeftY="121"> - <crop type="rect" leftOffset="0.29" rightOffset="0.29" topOffset="0" bottomOffset="0"/> - </img> - <shape width="404" height="68" topLeftX="382" topLeftY="260" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="404" height="77" topLeftX="382" topLeftY="193" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">岗位认知</span> - </strong> - </p> - </content> - </shape> - <shape width="124" height="128" topLeftX="178" topLeftY="200" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="132" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Job Awareness</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">岗位认知</span> - </strong> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="132" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Job Awareness</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">岗位认知</span> - </strong> - </p> - </content> - </shape> - <img src="SsUpbqOl3oLIkHxFZrLcciA3nze" width="278" height="368" topLeftX="265" topLeftY="104"> - <crop type="rect" leftOffset="45" rightOffset="45" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="211" height="58" topLeftX="26" topLeftY="104" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)" bold="true"> - <p lineSpacing="multiple:1" letterSpacing="2">角色理解</p> - </content> - </shape> - <shape width="211" height="41" topLeftX="26" topLeftY="430" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>副标题说明</p> - </content> - </shape> - <shape width="330" height="163" topLeftX="583" topLeftY="117" alpha="0.65" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - <p lineSpacing="multiple:1.7" letterSpacing="1"/> - <p lineSpacing="multiple:1.7" letterSpacing="1"> - <span fontSize="12">请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。请在此输入功能的亮点、价值等信息。</span> - </p> - </content> - </shape> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="164" height="81" topLeftX="518" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="82" bottomOffset="0.45" presetHandlers="0"/> - </img> - <img src="DviYbH0NJoReMUxZralchw1FnGd" width="223" height="111" topLeftX="748" topLeftY="429" flipY="true"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="111" bottomOffset="0" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <shape width="716" height="230" topLeftX="125" topLeftY="148" alpha="0.5" type="slides-full-round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Gtuybw38moZuM1xew9kcFwDVnde" width="285" height="284" topLeftX="97" topLeftY="121"> - <crop type="rect" leftOffset="0.29" rightOffset="0.29" topOffset="0" bottomOffset="0"/> - </img> - <shape width="404" height="68" topLeftX="382" topLeftY="260" alpha="0.6" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="16">单击此处输入你的正文,文字是您思想的提炼为了最终演示发布的良好效果</span> - </p> - </content> - </shape> - <shape width="404" height="77" topLeftX="382" topLeftY="193" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="38">未来规划</span> - </strong> - </p> - </content> - </shape> - <shape width="124" height="128" topLeftX="178" topLeftY="200" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <line startX="456" startY="48" endX="208" endY="48" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="132" height="41" topLeftX="90" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 0.651)" fontSize="14">Future Plan</span> - </p> - </content> - </shape> - <shape width="81" height="41" topLeftX="26" topLeftY="27" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">未来规划</span> - </strong> - </p> - </content> - </shape> - <shape width="150" height="150" topLeftX="405" topLeftY="139" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="150" height="150" topLeftX="128" topLeftY="139" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="150" height="150" topLeftX="682" topLeftY="139" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(216, 216, 255, 1) 0%,rgba(171, 194, 255, 1) 100%)"/> - </fill> - </shape> - <icon width="60" height="60" topLeftX="727" topLeftY="184" iconType="iconpark/Office/new-picture.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="173" topLeftY="184" iconType="iconpark/Office/book-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="60" height="60" topLeftX="450" topLeftY="184" iconType="iconpark/Charts/chart-proportion.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="202" height="110" topLeftX="102" topLeftY="342" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="102" topLeftY="305" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">关键</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="110" topLeftX="379" topLeftY="342" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="379" topLeftY="305" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">关键</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="110" topLeftX="656" topLeftY="342" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容描述相关的信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="202" height="38" topLeftX="656" topLeftY="305" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">关键</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">点 #1</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(3, 3, 1, 1)"/> - </fill> - </style> - <data> - <shape width="152" height="386" topLeftX="673" topLeftY="85" rotation="45" alpha="0.5" type="slides-full-round-rect"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <img src="Pjxfb38TMocH5exF6NhctB9cneg" width="281" height="280" topLeftX="638" topLeftY="221" rotation="69"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="OCyQbv6jsozDmNxxLP3coVWBnJh" width="258" height="260" topLeftX="565" topLeftY="27" rotation="8"> - <crop type="rect" leftOffset="2" rightOffset="2" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="Kj1Abq2yOoc4mVxI73Hc2DsVno0" width="131" height="131" topLeftX="814" topLeftY="376" rotation="285"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.36" bottomOffset="0.36" presetHandlers="0"/> - </img> - <img src="CkSDbsItwooxnSxkx9dcGcOinTe" width="131" height="128" topLeftX="787" topLeftY="45" rotation="344"> - <crop type="rect" leftOffset="20" rightOffset="27" topOffset="36" bottomOffset="13" presetHandlers="0"/> - </img> - <img src="Gtuybw38moZuM1xew9kcFwDVnde" width="92" height="91" topLeftX="582" topLeftY="387"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="SbyJb8XExolUZpxTlVVcXJtnncr" width="59" height="59" topLeftX="826" topLeftY="196"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="LGThb65tmoqfJExzmZEciVaDnUc" width="131" height="131" topLeftX="567" topLeftY="222" rotation="250"> - <crop type="rect" leftOffset="0.19" rightOffset="0.19" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="F1hobT5rOoXjgAxmK1sc3zm7nGe" width="74" height="74" topLeftX="736" topLeftY="11" rotation="330"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="470" height="128" topLeftX="53" topLeftY="328" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="72" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <span fontSize="72">感谢您的观看</span> - </p> - </content> - </shape> - <shape width="470" height="47" topLeftX="53" topLeftY="304" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">Thanks For Your Time</span> - </p> - </content> - </shape> - <shape width="470" height="47" topLeftX="53" topLeftY="432" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">2026-07-12</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/personal--self_intro.xml b/skills/lark-slides/assets/templates/personal--self_intro.xml deleted file mode 100644 index afeca6e4e..000000000 --- a/skills/lark-slides/assets/templates/personal--self_intro.xml +++ /dev/null @@ -1,696 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>个人介绍-裂图重新上传 - - - - - - - <headline fontColor="#000000FF" fontSize="28"/> - <sub-headline fontColor="#000000FF" fontSize="22"/> - <body fontColor="#000000FF"/> - <caption fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </style> - <data> - <shape width="494" height="180" topLeftX="39" topLeftY="111" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(236, 145, 78, 1)">Self</span> - </p> - <p lineSpacing="multiple:1">Introduction</p> - </content> - </shape> - <shape width="250" height="62" topLeftX="39" topLeftY="289" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="false"> - <p> - <span bold="false">个人介绍</span> - </p> - </content> - </shape> - <shape width="54" height="98" topLeftX="805" topLeftY="47" rotation="270" type="round2diag-rect"> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="534" topLeftY="398" type="rt-triangle"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="534" topLeftY="300" rotation="270" type="round1rect"> - <fill> - <fillColor color="rgba(216, 57, 49, 1)"/> - </fill> - </shape> - <img src="PwZDbqSihocHdFxyqlycMrfVnEc" width="250" height="373" topLeftX="631" topLeftY="122"> - <crop type="round2diag-rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="290" height="41" topLeftX="39" topLeftY="455" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(128, 128, 128, 1)"> - <p>关于你的一些小介绍文案</p> - </content> - </shape> - <shape width="180" height="180" topLeftX="541" topLeftY="32" type="donut"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </style> - <data> - <shape width="494" height="84" topLeftX="39" topLeftY="101" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(250, 211, 85, 1)" fontSize="64">Hello,</span> - </p> - </content> - </shape> - <shape width="494" height="84" topLeftX="39" topLeftY="179" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(248, 247, 246, 1)" fontSize="64">我是 Monica</span> - </p> - </content> - </shape> - <shape width="98" height="98" topLeftX="237" topLeftY="399" type="rt-triangle"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="184" height="98" topLeftX="335" topLeftY="399" rotation="0" type="round2diag-rect"> - <fill> - <fillColor color="rgba(236, 145, 78, 1)"/> - </fill> - </shape> - <shape width="196" height="196" topLeftX="41" topLeftY="301" type="donut"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <shape width="72" height="72" topLeftX="433" topLeftY="412" type="pie"> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </style> - <data> - <shape width="612" height="92" topLeftX="174" topLeftY="291" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(128, 128, 128, 1)" textAlign="center"> - <p>单击此处输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理解您所传达的信息。</p> - </content> - </shape> - <shape width="612" height="116" topLeftX="174" topLeftY="176" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(236, 145, 78, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p>职业设计师</p> - </content> - </shape> - <shape width="612" height="53" topLeftX="174" topLeftY="142" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true" textAlign="center"> - <p>我是一个</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </style> - <data> - <undefined type="fallback"/> - <shape width="612" height="53" topLeftX="174" topLeftY="70" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="22" bold="true" textAlign="center"> - <p>我的作品</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </style> - <data> - <shape width="494" height="84" topLeftX="39" topLeftY="97" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(248, 247, 246, 1)" fontSize="64">我的职业生涯</span> - </p> - </content> - </shape> - <table topLeftX="50" topLeftY="307"> - <colgroup> - <col span="3" width="290"/> - </colgroup> - <tr height="62"> - <td> - <borderTop color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="28">01</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="28">02</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="28">03</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="43"> - <td> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">关键节点 #1</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>关键节点 #2</p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>关键节点 #3</p> - </content> - </td> - </tr> - <tr height="62"> - <td> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 0.4)" lineJoin="miter" miterLimit="10"/> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </td> - </tr> - </table> - <shape width="60" height="60" topLeftX="660" topLeftY="190" rotation="270" type="rt-triangle"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="724" topLeftY="54" type="donut"> - <fill> - <fillColor color="rgba(236, 145, 78, 1)"/> - </fill> - </shape> - <shape width="201" height="98" topLeftX="720" topLeftY="151" rotation="0" presetHandlers="49" type="round-rect"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="822" topLeftY="54" rotation="0" type="rt-triangle"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </style> - <data> - <shape width="465" height="85" topLeftX="39" topLeftY="95" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(31, 35, 41, 1)" fontSize="54">我获得的</span> - <span fontSize="54"> </span> - <span color="rgba(236, 145, 78, 1)" fontSize="54">XXX</span> - </p> - </content> - </shape> - <shape width="361" height="104" topLeftX="39" topLeftY="180" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(128, 128, 128, 1)" textAlign="left"> - <p>单击此处输入你的正文,文字是您思想的提炼,为了最终演示发布的良好效果,请尽量言简意赅的阐述观点;根据需要可酌情增减文字,以便观者可以准确理解您所传达的信息。</p> - </content> - </shape> - <img src="AwuPblzvMoG7Huxr1HdcqoeFn5c" width="338" height="393" topLeftX="578" topLeftY="87" contrast="-20" saturation="-14"> - <crop type="round2diag-rect" leftOffset="23" rightOffset="3" topOffset="85" bottomOffset="67"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </style> - <data> - <shape width="98" height="98" topLeftX="601" topLeftY="403" rotation="270" type="rt-triangle"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="196" height="196" topLeftX="699" topLeftY="305" type="slides-block-arc"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="810" topLeftY="293" rotation="270" type="ellipse"> - <fill> - <fillColor color="rgba(216, 57, 49, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="601" topLeftY="305" rotation="180" type="round1rect"> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </shape> - <shape width="465" height="150" topLeftX="39" topLeftY="347" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(31, 35, 41, 1)" fontSize="54">除了是个设计师,</span> - </p> - <p lineSpacing="multiple:1.2"> - <span color="rgba(31, 35, 41, 1)" fontSize="54">我还是</span> - <span fontSize="54"> </span> - <span color="rgba(236, 145, 78, 1)" fontSize="54">XXX</span> - </p> - </content> - </shape> - <shape width="262" height="160" topLeftX="58" topLeftY="94" type="rect"> - <border color="rgba(128, 128, 128, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="171" height="42" topLeftX="133" topLeftY="112" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">职业技能 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="83" topLeftX="70" topLeftY="156" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(128, 128, 128, 1)" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="60" height="62" topLeftX="78" topLeftY="102" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="true" textAlign="left"> - <p>01</p> - </content> - </shape> - <shape width="262" height="160" topLeftX="339" topLeftY="94" type="rect"> - <border color="rgba(128, 128, 128, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="171" height="42" topLeftX="413" topLeftY="112" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2">职业技能 #2</p> - </content> - </shape> - <shape width="231" height="83" topLeftX="350" topLeftY="156" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(128, 128, 128, 1)" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="60" height="62" topLeftX="358" topLeftY="102" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="true" textAlign="left"> - <p>02</p> - </content> - </shape> - <shape width="262" height="160" topLeftX="619" topLeftY="94" type="rect"> - <border color="rgba(128, 128, 128, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="171" height="42" topLeftX="693" topLeftY="112" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2">职业技能 #3</p> - </content> - </shape> - <shape width="231" height="83" topLeftX="630" topLeftY="156" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(128, 128, 128, 1)" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="60" height="62" topLeftX="638" topLeftY="102" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(31, 35, 41, 1)" bold="true" textAlign="left"> - <p> - <span color="rgba(31, 35, 41, 1)">03</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </style> - <data> - <shape width="300" height="135" topLeftX="39" topLeftY="104" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)" fontSize="48">如何与客户进行相处</span> - </p> - </content> - </shape> - <shape width="98" height="98" topLeftX="53" topLeftY="389" rotation="270" type="rt-triangle"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="166" height="166" topLeftX="151" topLeftY="293" rotation="90" type="slides-block-arc"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="248" topLeftY="389" rotation="270" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="248" topLeftY="389" rotation="270" type="rt-triangle"> - <fill> - <fillColor color="rgba(236, 145, 78, 1)"/> - </fill> - </shape> - <shape width="64" height="64" topLeftX="423" topLeftY="130" presetHandlers="32" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="45" height="45" topLeftX="432" topLeftY="140" iconType="iconpark/Office/application-effect.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="171" height="42" topLeftX="506" topLeftY="142" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">步骤 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="83" topLeftX="414" topLeftY="202" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="64" height="64" topLeftX="679" topLeftY="130" type="rect"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <icon width="45" height="45" topLeftX="689" topLeftY="140" iconType="iconpark/Base/home.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="171" height="42" topLeftX="762" topLeftY="142" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">步骤 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="83" topLeftX="670" topLeftY="202" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="64" height="64" topLeftX="426" topLeftY="305" type="rect"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <icon width="45" height="45" topLeftX="436" topLeftY="314" iconType="iconpark/Charts/chart-line.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="171" height="42" topLeftX="509" topLeftY="316" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">步骤 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="83" topLeftX="417" topLeftY="376" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="64" height="64" topLeftX="683" topLeftY="305" presetHandlers="32" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="45" height="45" topLeftX="692" topLeftY="314" iconType="iconpark/Office/mail-open.svg"> - <border width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="171" height="42" topLeftX="765" topLeftY="316" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">步骤 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="83" topLeftX="673" topLeftY="376" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 0.659)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 0.659)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </style> - <data> - <shape width="297" height="135" topLeftX="39" topLeftY="104" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)" fontSize="48">承担对客户的相关责任</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - <shape width="98" height="98" topLeftX="53" topLeftY="389" rotation="270" type="rt-triangle"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="166" height="166" topLeftX="151" topLeftY="293" rotation="90" type="slides-block-arc"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="248" topLeftY="389" rotation="270" type="round1rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="98" height="98" topLeftX="248" topLeftY="389" rotation="270" type="rt-triangle"> - <fill> - <fillColor color="rgba(236, 145, 78, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </style> - <data> - <shape width="465" height="150" topLeftX="32" topLeftY="88" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(31, 35, 41, 1)" fontSize="54">与我合作客户的</span> - </p> - <p lineSpacing="multiple:1.2"> - <span color="rgba(236, 145, 78, 1)" fontSize="54">成功案例</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - <shape width="361" height="41" topLeftX="42" topLeftY="233" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(128, 128, 128, 1)" textAlign="left"> - <p>描述相关的信息以解释你的标题。</p> - </content> - </shape> - <shape width="465" height="198" topLeftX="462" topLeftY="297" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="UIgDbcJqPolTRvx8sh3czFBvnWg" width="465" height="198" topLeftX="462" topLeftY="297"> - <crop type="rect" leftOffset="20" rightOffset="0" topOffset="267" bottomOffset="20" presetHandlers="0"/> - </img> - <img src="QdDebJmlloLN54xhKPac2WGrngb" width="465" height="198" topLeftX="462" topLeftY="81"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="133" bottomOffset="133" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(51, 71, 255, 1)"/> - </fill> - </style> - <data> - <shape width="494" height="84" topLeftX="39" topLeftY="101" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(250, 211, 85, 1)" fontSize="64">Thanks</span> - </p> - </content> - </shape> - <shape width="494" height="84" topLeftX="39" topLeftY="179" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span color="rgba(255, 255, 255, 1)">感谢你的观看</span> - </p> - </content> - </shape> - <shape width="98" height="98" topLeftX="237" topLeftY="399" type="rt-triangle"> - <fill> - <fillColor color="rgba(23, 182, 156, 1)"/> - </fill> - </shape> - <shape width="184" height="98" topLeftX="335" topLeftY="399" rotation="0" type="round2diag-rect"> - <fill> - <fillColor color="rgba(236, 145, 78, 1)"/> - </fill> - </shape> - <shape width="196" height="196" topLeftX="41" topLeftY="301" type="donut"> - <fill> - <fillColor color="rgba(250, 211, 85, 1)"/> - </fill> - </shape> - <shape width="72" height="72" topLeftX="433" topLeftY="412" type="pie"> - <fill> - <fillColor color="rgba(248, 247, 246, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/personal--teaching_sharing.xml b/skills/lark-slides/assets/templates/personal--teaching_sharing.xml deleted file mode 100644 index 0e526cca4..000000000 --- a/skills/lark-slides/assets/templates/personal--teaching_sharing.xml +++ /dev/null @@ -1,3013 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>分享教学 - - - - - -
- - - - - - - - - - - - - -

- 分享时间: - 2026.XX.XX -

-
-
- - -

分享人:XX

-
-
- - -

分享教学课件

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market - Research -

-

- Sharing Teaching Courseware -

-
-
- - - - - - - -

- - YOUR LOGO - -

-
-
-
- - - -
- - - - - -

- 目录 -

-
-
- - -

- Content -

-
-
- - - - - - - - - -

- - 01. - -

-
-
- - - - - - - - - - - - -

- - 02. - -

-
-
- - - - - - - - - - - - -

- - 03. - -

-
-
- - - - - - - - - - - - -

- - 04. - -

-
-
- - - - - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

内容总结

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

流程经验

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

案例分析

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

基本介绍

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market Research -

-

- Sharing Teaching Courseware -

-
-
-
- - - -
- - - - - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

基本介绍

-
-
- - -

01.

-
-
- - -

Basic Introduction

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market Research -

-

- Sharing Teaching Courseware -

-
-
-
- - - -
- - - - - -

What Are We

-
-
- - -

我们是什么

-
-
- - - - - - - - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
-
- - - -
- - - - - -

Study Goals

-
-
- - -

学习目标

-
-
- - -

- - 目标文案 - -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - -

- - 目标文案 - -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - -

- - 目标文案 - -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - -

- - 目标文案 - -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - -

- 案例故事 - 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

案例故事标题文案

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- - YOUR LOGO - -

-
-
- - -

案例故事

-
-
- - -

Case Stories

-
-
-
- - - -
- - - - - -

General Introduction

-
-
- - -

基本介绍

-
-
- - - - - - - - - -

- 公司已完成 -

-
-
- - -

- - F 轮融资 - -

-
-
- - - - - - - - - -

- 总融资金额 -

-
-
- - -

- - 超 3 亿元 - -

-
-
- - - - - - - - - -

- 公司估值 -

-
-
- - -

- 超 10 亿元 -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -

- - A轮 - -

-
-
- - -

- 2012.12 -

-
-
- - -

- 500万元 -

-
-
- - -

- xx -

-
-
- - -

- -- -

-
-
- - -

- - B轮 - -

-
-
- - -

- 2015.08 -

-
-
- - -

- 1000万元 -

-
-
- - -

- xx -

-
-
- - -

- 2000万元 -

-
-
- - -

- - C轮 - -

-
-
- - -

- 2016.11 -

-
-
- - -

- 2000万元 -

-
-
- - -

- xx -

-
-
- - -

- 5000万元 -

-
-
- - -

- - D轮 - -

-
-
- - -

- 2020.01 -

-
-
- - -

- 5000万元 -

-
-
- - -

- xx -

-
-
- - -

- -- -

-
-
- - -

- - E轮 - -

-
-
- - -

- 2021.09 -

-
-
- - -

- 8000万元 -

-
-
- - -

- xx -

-
-
- - -

- -- -

-
-
- - -

- - F轮 - -

-
-
- - -

- 2024.01 -

-
-
- - -

- >亿元 -

-
-
- - -

- xx -

-
-
- - -

- 10 亿 -

-
-
- - -

- - 融资时间 - -

-
-
- - -

- - 融资金额 - -

-
-
- - -

- - 投资机构 - -

-
-
- - -

- - 估值金额 - -

-
-
- - - - - - - - - -

- - F轮 - -

-
-
- - -

- - 2024.01 - -

-
-
- - -

- - >亿元 - -

-
-
- - -

- - xx - -

-
-
- - -

- - 10 亿 - -

-
-
-
- - - -
- - - - - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

案例分析

-
-
- - -

02.

-
-
- - -

Case Analysis

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market Research -

-

- Sharing Teaching Courseware -

-
-
-
- - - -
- - - - - - - - - - - - - - - - - -

- - Demo.2 - -

-
-
- - - - - - - - - - - - - - -

- - Demo.1 - -

-
-
- - - - - - - - - - - - - - -

- - Demo.3 - -

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - - - - - - - - - - - - - -

Case Presentation

-
-
- - -

案例展示

-
-
-
- - - -
- - - - - -

Case Background

-
-
- - -

案例背景

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- Pain Point -

-
-
- - -

- 数据研发过程痛点 -

-
-
- - - - - - -

- - 01 - -

-
- -
- - - - - - -

- - 04 - -

-
- -
- - - - - - -

- - 02 - -

-
- -
- - - - - - -

- - 03 - -

-
- -
- - - - - - - - - -

痛点一

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

痛点四

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

痛点二

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

痛点三

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
-
- - - -
- - - - - -

Case Analysis

-
-
- - -

具体案例分析

-
-
- - - - - - - - - - - - - - -

- - 02 - -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - -

- - 关键词 - -

-
- -
- - - - - - - - - - - - -

- - 关键词 - -

-
- -
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - - - - - - - - - -

关键词

-
- -
- - - - - - - - - -

关键词

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - -

关键词

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - -

关键词

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - - -

- - 标题 01 - -

-
-
- - -

- Title -

-
-
- - - - - - - - -

- - 标题 02 - -

-
-
- - -

- Title -

-
-
- - - - - - - - -

- - 标题 03 - -

-
-
- - -

- Title -

-
-
- - - - - - - - - -

- - 01 - -

-
-
- - - - - -

- - 关键词 - -

-
- -
- - - - - -

- 输入相关的描述信息 -

-
- -
- - - - - -

- 输入相关的描述信息 -

-
- -
- - - - - - - - - -

- - 03 - -

-
-
- - - - - -

- - 关键词 - -

-
- -
- - - - - -

- 描述信息 -

-
- -
- - - - - -

- 输入相关的描述信息 -

-
- -
- - - - - -

- 描述信息 -

-
- -
- - - - - -

- 输入相关的描述信息 -

-
- -
- - - - - -

- 输入相关的描述信息 -

-
- -
- - - - - - - - - - - - -

- - 关键词 - -

-
- -
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - - - - - -

- Process Description -

-
-
- - -

- 数据研发过程 -

-
-
-
- - - -
- - - - - -

Case Title

-
-
- - -

案例题目

-
-
- - - - - - - - - - - - - - -

- 案例题目名称 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - - -
- - - -
- - - - - -

Answer Question

-
-
- - -

题目答案

-
-
- - - - - - - - - - - - -

解答思路 01

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - -

解答思路 02

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - -
- - - -
- - - - - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

流程经验

-
-
- - -

03.

-
-
- - -

Process experience

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market Research -

-

- Sharing Teaching Courseware -

-
-
-
- - - -
- - - - - -

Process Steps

-
-
- - -

流程步骤

-
-
- - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Step.1 -

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Step.2 -

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Step.3 -

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - - - - - - -

- 标题文案 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Step.4 -

-
-
- - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - -

- 输入相关的描述信息 -

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

重点经验标题文案

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

重点经验标题文案

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

重点经验标题文案

-
-
- - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

重点经验标题文案

-
-
- - -

Key Experience

-
-
- - -

重点经验

-
-
- - - - - - - -

- Key.1 -

-
-
- - - - - - - -

- Key.2 -

-
-
- - - - - - - -

- Key.3 -

-
-
- - - - - - - -

- Key.4 -

-
-
-
- - - -
- - - - - -

输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。

-
-
- - -

内容总结

-
-
- - -

04.

-
-
- - -

Content summary

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market Research -

-

- Sharing Teaching Courseware -

-
-
-
- - - -
- - - - - - - - - - -

课程总结标题文案

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Point.1 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

课程总结标题文案

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Point.2 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

课程总结标题文案

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Point.3 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

课程总结标题文案

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- Point.4 -

-
-
- - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - - - - - - - - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - -

- Course Summary -

-
-
- - -

课程总结

-
-
- - - - - - - -

- - YOUR LOGO - -

-
-
-
- - - -
- - - - - -

Recommended Books

-
-
- - -

推荐书籍

-
-
- - - - - - - - - -

- 《书籍名称》 -

-
-
- - -

- 作者名:xx -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

- 《书籍名称》 -

-
-
- - -

- 作者名:xx -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
- - - - - - - - - -

- 《书籍名称》 -

-
-
- - -

- 作者名:xx -

-
-
- - - - - - - -

- 输入相关的描述信息以解释你的标题。输入相关的描述信息以解释你的标题。 -

-
-
-
- - - -
- - - - - - - - - - -

- - YOUR LOGO - -

-
-
- - -

- 市场研究 -

-
-
- - - - - -

- Market Research -

-

- Sharing Teaching Courseware -

-
-
- - -

- 欢迎大家扫码反馈 -

-
-
- - - - - - - - - - - - - -

- Thank You For Listening -

-
-
- - -

感谢聆听

-
-
- - - -
- - - -
- \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/product--business_case_analysis.xml b/skills/lark-slides/assets/templates/product--business_case_analysis.xml deleted file mode 100644 index df531dbdb..000000000 --- a/skills/lark-slides/assets/templates/product--business_case_analysis.xml +++ /dev/null @@ -1,1341 +0,0 @@ - - 商业案例分析 - - - - - - - <headline fontColor="rgba(255, 255, 255, 1)" fontSize="28"/> - <sub-headline fontColor="rgba(255, 255, 255, 1)"/> - <body fontColor="rgba(255, 255, 255, 1)"/> - <caption fontColor="rgba(255, 255, 255, 1)"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="V2JPb0EKrodGMbxy97ecqA83nIe" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="547" height="116" topLeftX="42" topLeftY="373" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" fontFamily="undefined" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p>商业案例分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="L8TTba7fBoMPFTxtouXcP12rnqd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="488" height="58" topLeftX="53" topLeftY="85" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>议程</p> - </content> - </shape> - <shape width="318" height="38" topLeftX="56" topLeftY="126" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="175" height="56" topLeftX="492" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="175" height="56" topLeftX="704" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="175" height="56" topLeftX="281" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="175" height="56" topLeftX="69" topLeftY="379" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="200" height="44" topLeftX="69" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>背景概述</p> - </content> - </shape> - <shape width="48" height="48" topLeftX="81" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">1</span> - </strong> - </p> - </content> - </shape> - <shape width="200" height="44" topLeftX="281" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>案例描述</p> - </content> - </shape> - <shape width="48" height="48" topLeftX="293" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">2</span> - </strong> - </p> - </content> - </shape> - <shape width="200" height="44" topLeftX="704" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>SUMMARY</p> - </content> - </shape> - <shape width="48" height="48" topLeftX="716" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">4</span> - </strong> - </p> - </content> - </shape> - <shape width="200" height="44" topLeftX="492" topLeftY="348" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>解决方案</p> - </content> - </shape> - <shape width="48" height="48" topLeftX="504" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18">3</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="MeUnbQuR7on8Nvxi7BvctlyUn9b" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="391" height="97" topLeftX="82" topLeftY="280" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p>背景概述</p> - </content> - </shape> - <shape width="139" height="140" topLeftX="82" topLeftY="140" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="100" color="rgba(255, 255, 255, 0.349)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 0.349)" fontSize="100">01</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="368" height="110" topLeftX="59" topLeftY="128" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这个庞大而互联的全球市场中,企业面临着无数的机遇和挑战。拓展国际市场需要精心的规划,以及对不同文化、法规和消费者偏好的深入理解。适应不同的市场动态对于成功渗透新市场并建立全球影响力至关重要。企业必须进行深入的市场研究,以确定潜在竞争对手、目标受众和新兴趋势。</p> - </content> - </shape> - <shape width="423" height="74" topLeftX="59" topLeftY="48" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p>全球市场</p> - </content> - </shape> - <shape width="105" height="24" topLeftX="59" topLeftY="323" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>#1 好奇心</p> - </content> - </shape> - <shape width="146" height="24" topLeftX="175" topLeftY="323" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>#2 消费能力</p> - </content> - </shape> - <shape width="94" height="24" topLeftX="333" topLeftY="323" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>#3 影响</p> - </content> - </shape> - <shape width="109" height="38" topLeftX="59" topLeftY="360" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>属性</p> - </content> - </shape> - <shape width="146" height="38" topLeftX="260" topLeftY="415" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>消费能力</p> - </content> - </shape> - <shape width="185" height="7" topLeftX="64" topLeftY="430" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="7" topLeftX="64" topLeftY="430" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="94" height="38" topLeftX="260" topLeftY="390" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>好奇心</p> - </content> - </shape> - <shape width="185" height="7" topLeftX="64" topLeftY="405" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="109" height="7" topLeftX="64" topLeftY="405" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="99" height="38" topLeftX="260" topLeftY="441" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong>影响力 </strong> - </p> - </content> - </shape> - <shape width="184" height="8" topLeftX="63" topLeftY="456" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="150" height="7" topLeftX="63" topLeftY="457" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <img src="SaukbeC3GofKMExRxULcvgcfnQf" width="343" height="447" topLeftX="474" topLeftY="48" saturation="-100"> - <crop type="rect" leftOffset="52" rightOffset="52" topOffset="0" bottomOffset="0" presetHandlers="18"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="340" height="442" topLeftX="51" topLeftY="48" presetHandlers="36" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="105" height="24" topLeftX="445" topLeftY="337" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>#1 好奇心</p> - </content> - </shape> - <shape width="146" height="24" topLeftX="561" topLeftY="337" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>#2 消费能力</p> - </content> - </shape> - <shape width="94" height="24" topLeftX="719" topLeftY="337" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>#3 影响</p> - </content> - </shape> - <shape width="109" height="38" topLeftX="445" topLeftY="374" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>属性</p> - </content> - </shape> - <shape width="146" height="38" topLeftX="646" topLeftY="429" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>消费能力</p> - </content> - </shape> - <shape width="185" height="7" topLeftX="450" topLeftY="444" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="78" height="7" topLeftX="450" topLeftY="444" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="94" height="38" topLeftX="646" topLeftY="404" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>好奇心</p> - </content> - </shape> - <shape width="185" height="7" topLeftX="450" topLeftY="419" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="109" height="7" topLeftX="450" topLeftY="419" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="99" height="38" topLeftX="646" topLeftY="456" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong>影响力 </strong> - </p> - </content> - </shape> - <shape width="184" height="8" topLeftX="449" topLeftY="470" alpha="0.2" type="slides-full-round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="150" height="7" topLeftX="449" topLeftY="471" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <img src="Ozhmb1LqwoH5tZxDJ28cXRzUnDb" width="343" height="447" topLeftX="50" topLeftY="46"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="83" bottomOffset="83" presetHandlers="18"/> - </img> - <shape width="368" height="128" topLeftX="445" topLeftY="143" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在国内市场这片充满活力的领域,企业面临着无数的挑战和机遇。随着消费者需求的不断变化和激烈的竞争,要想保持领先地位,就需要进行战略规划和具备适应性。建立强大的客户关系至关重要,因为满意的客户往往会成为忠实的品牌拥护者。此外,及时了解市场趋势和消费者喜好也是企业有效调整产品的必要条件。</p> - </content> - </shape> - <shape width="423" height="74" topLeftX="445" topLeftY="46" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)" bold="true" lineSpacing="multiple:1.35"> - <p>国内市场</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="197" height="56" topLeftX="51" topLeftY="385" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在此处输入简短说明,以便向受众提供上下文。</p> - </content> - </shape> - <shape width="285" height="58" topLeftX="51" topLeftY="341" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>市场趋势</p> - </content> - </shape> - <line startX="375" startY="357" endX="889" endY="358" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="290" endX="889" endY="291" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="222" endX="890" endY="223" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="155" endX="889" endY="156" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="375" startY="88" endX="889" endY="89" alpha="0.3"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="22" height="282" topLeftX="842" topLeftY="144" presetHandlers="0" alpha="0.2" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="23" height="103" topLeftX="396" topLeftY="323" presetHandlers="0" alpha="0.2" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="244" topLeftX="488" topLeftY="182" presetHandlers="0" alpha="0.2" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="169" topLeftX="574" topLeftY="257" presetHandlers="0" alpha="0.2" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="247" topLeftX="666" topLeftY="179" presetHandlers="0" alpha="0.2" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="311" topLeftX="755" topLeftY="115" presetHandlers="0" alpha="0.2" type="round-rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="50" height="38" topLeftX="381" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2021</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="474" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2022</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="560" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2023</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="652" topLeftY="429" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2024</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="741" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2025</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="827" topLeftY="430" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">2026</span> - </p> - </content> - </shape> - <shape width="22" height="234" topLeftX="842" topLeftY="193" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="190" topLeftX="755" topLeftY="236" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="114" topLeftX="666" topLeftY="313" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="151" topLeftX="574" topLeftY="275" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="127" topLeftX="488" topLeftY="299" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="22" height="94" topLeftX="396" topLeftY="332" type="rect"> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - </shape> - <shape width="50" height="38" topLeftX="321" topLeftY="71" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">100</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="320" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">80</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="320" topLeftY="204" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">60</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="321" topLeftY="274" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">40</span> - </p> - </content> - </shape> - <shape width="50" height="38" topLeftX="320" topLeftY="342" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="right"> - <p> - <span color="rgba(193, 193, 193, 1)" fontSize="12">20</span> - </p> - </content> - </shape> - <line startX="375" startY="425" endX="889" endY="426"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="391" height="97" topLeftX="59" topLeftY="306" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p>案件描述</p> - </content> - </shape> - <shape width="391" height="140" topLeftX="59" topLeftY="182" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="100" color="rgba(255, 255, 255, 0.349)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 0.349)" fontSize="100">02</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="460" startY="184" endX="460" endY="390" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="326" height="110" topLeftX="508" topLeftY="249" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.4"> - <p>制定计划是远远不够的。我们必须积极实施计划,并始终致力于实现我们的目标。只有那些能够有效地将计划和实施结合起来的人才会取得成功。</p> - </content> - </shape> - <shape width="326" height="110" topLeftX="54" topLeftY="249" alpha="0.5" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.4"> - <p>定义目标受众包括确定组织或产品的目标市场,以及确定目标客户的特征和需求。它帮助组织更好地满足客户的需求,从而增加其市场份额和促进增长。</p> - </content> - </shape> - <shape width="360" height="44" topLeftX="508" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>2. 主要产品</p> - </content> - </shape> - <shape width="360" height="44" topLeftX="54" topLeftY="174" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <ol> - <li index="1"> - <p>品牌介绍</p> - </li> - </ol> - </content> - </shape> - <shape width="574" height="58" topLeftX="54" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>品牌和产品介绍</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="255" height="74" topLeftX="582" topLeftY="161" alpha="0.65" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>价格指的是客户为购买一种产品所支付的金额,它是由生产成本、竞争情况和期望的利润率等因素决定的。</p> - </content> - </shape> - <shape width="254" height="56" topLeftX="154" topLeftY="161" alpha="0.65" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p>公司向目标市场提供的有形或无形的产品,包括设计、功能、质量、包装和品牌。</p> - </content> - </shape> - <shape width="255" height="56" topLeftX="154" topLeftY="328" alpha="0.65" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p>通过分销渠道将产品提供给客户,考虑直接销售、零售商和电子商务平台等选项。</p> - </content> - </shape> - <shape width="272" height="56" topLeftX="582" topLeftY="328" alpha="0.65" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>促销是指将产品推向目标市场的活动,包括广告,公关和促销。</p> - </content> - </shape> - <shape width="76" height="38" topLeftX="65" topLeftY="223" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong>产品</strong> - </p> - </content> - </shape> - <shape width="63" height="63" topLeftX="72" topLeftY="153" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - </shape> - <icon width="36" height="36" topLeftX="85" topLeftY="166" iconType="iconpark/Makeups/lipstick.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="63" height="63" topLeftX="503" topLeftY="153" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - </shape> - <shape width="63" height="38" topLeftX="503" topLeftY="223" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>价格</p> - </content> - </shape> - <icon width="36" height="36" topLeftX="516" topLeftY="166" iconType="iconpark/Money/financing-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="88" height="38" topLeftX="493" topLeftY="391" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>晋升</p> - </content> - </shape> - <shape width="63" height="63" topLeftX="505" topLeftY="320" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - </shape> - <icon width="36" height="36" topLeftX="519" topLeftY="334" iconType="iconpark/Charts/positive-dynamics.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="63" height="38" topLeftX="72" topLeftY="391" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p>地点</p> - </content> - </shape> - <shape width="63" height="63" topLeftX="72" topLeftY="320" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - </shape> - <icon width="36" height="36" topLeftX="86" topLeftY="334" iconType="iconpark/Travel/world.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="574" height="58" topLeftX="54" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>4P 分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <undefined type="fallback"/> - <shape width="574" height="58" topLeftX="54" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>波特五力模型</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="597" height="58" topLeftX="46" topLeftY="53" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>客户痛点</p> - </content> - </shape> - <undefined type="fallback"/> - <img src="AeqAbKTpTo58c9xtKn2cljJAnQd" width="233" height="100" topLeftX="62" topLeftY="151" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="32" presetHandlers="8"/> - </img> - <img src="ThzbbJjWXol6PyxlMqpclAA7n7c" width="233" height="100" topLeftX="62" topLeftY="385" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="32" bottomOffset="0.75" presetHandlers="8"/> - </img> - <img src="LVPfbAlHkoTFEbxR9rPcw0xtnMg" width="233" height="100" topLeftX="62" topLeftY="268" saturation="-100"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="33" presetHandlers="8"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="NGJmb0DV0oe6vgxJbsgcukxcnUe" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="391" height="140" topLeftX="59" topLeftY="181" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="100" color="rgba(255, 255, 255, 0.349)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 0.349)" fontSize="100">03</span> - </strong> - </p> - </content> - </shape> - <shape width="391" height="97" topLeftX="59" topLeftY="305" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p>解决方案</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="365" height="365" topLeftX="268" topLeftY="147" alpha="0.2" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="218" height="218" topLeftX="341" topLeftY="220" alpha="0.2" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="104" height="104" topLeftX="399" topLeftY="278" alpha="0.2" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <line startX="268" startY="329" endX="633" endY="330" alpha="0.2"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="451" startY="438" endX="450" endY="221" alpha="0.2"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="244" height="39" topLeftX="-26" topLeftY="306" rotation="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>经济的</p> - </content> - </shape> - <shape width="244" height="41" topLeftX="681" topLeftY="305" rotation="90" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="15" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>高端的</p> - </content> - </shape> - <shape width="244" height="39" topLeftX="327" topLeftY="482" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>市场依赖性</p> - </content> - </shape> - <shape width="244" height="39" topLeftX="327" topLeftY="115" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>市场统治力</p> - </content> - </shape> - <shape width="47" height="47" topLeftX="243" topLeftY="386" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">J</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="202" topLeftY="431" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="61" height="61" topLeftX="236" topLeftY="176" type="ellipse"> - <fill> - <fillColor color="rgba(45, 49, 53, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">H</span> - </p> - </content> - </shape> - <shape width="113" height="38" topLeftX="210" topLeftY="237" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="48" height="48" topLeftX="355" topLeftY="340" type="ellipse"> - <fill> - <fillColor color="rgba(242, 243, 245, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>I</p> - </content> - </shape> - <shape width="128" height="38" topLeftX="315" topLeftY="386" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="44" height="44" topLeftX="375" topLeftY="238" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">F</span> - </p> - </content> - </shape> - <shape width="105" height="38" topLeftX="345" topLeftY="277" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="46" height="46" topLeftX="503" topLeftY="226" type="ellipse"> - <fill> - <fillColor color="rgba(242, 243, 245, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>C</p> - </content> - </shape> - <shape width="128" height="38" topLeftX="462" topLeftY="270" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="619" topLeftY="372" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(31, 35, 41, 1)"> - <p> - <span color="rgba(31, 35, 41, 1)" fontSize="18">E</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="590" topLeftY="442" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="72" height="72" topLeftX="492" topLeftY="340" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="24">D</span> - </p> - </content> - </shape> - <shape width="113" height="38" topLeftX="471" topLeftY="412" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="70" height="70" topLeftX="646" topLeftY="211" type="ellipse"> - <fill> - <fillColor color="rgba(45, 49, 53, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">B</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="617" topLeftY="281" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="44" height="44" topLeftX="569" topLeftY="144" type="ellipse"> - <fill> - <fillColor color="rgba(45, 49, 53, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">A</span> - </p> - </content> - </shape> - <shape width="128" height="38" topLeftX="528" topLeftY="187" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </strong> - </p> - </content> - </shape> - <shape width="691" height="58" topLeftX="54" topLeftY="38" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>方案 1:更具竞争力的产品</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="342" height="38" topLeftX="51" topLeftY="115" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="486" height="58" topLeftX="51" topLeftY="71" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>解决方案 2:更好的定价策略</p> - </content> - </shape> - <table topLeftX="59" topLeftY="226"> - <colgroup> - <col span="3" width="269"/> - </colgroup> - <tr height="44"> - <td> - <borderTop color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="linear-gradient(90deg,rgba(255, 255, 255, 1) 0%,rgba(255, 255, 255, 1) 100%)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p>行动项目</p> - </content> - </td> - <td> - <borderTop color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(255, 255, 255, 1)" bold="true"> - <p>预算</p> - </content> - </td> - <td> - <borderTop color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(255, 255, 255, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(31, 35, 41, 1)" bold="true"> - <p>经理</p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>跨平台宣传</p> - </content> - </td> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 255, 255, 0.149)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"> - <p> - <span color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)" fontSize="14">$ 20,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@James Morris</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>与顶级影响者合作</p> - </content> - </td> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 255, 255, 0.149)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"> - <p> - <span color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)" fontSize="14">$ 50,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@James Morris</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">SEO</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 255, 255, 0.149)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"> - <p> - <span color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)" fontSize="14">$30,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@James Morris</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>总共</p> - </content> - </td> - <td> - <borderRight color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(147, 150, 156, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(255, 255, 255, 0.149)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)"> - <p> - <span color="linear-gradient(180deg,rgba(156, 156, 158, 1) 0%,rgba(192, 197, 211, 1) 100%)" fontSize="14">$ 100,000</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(193, 193, 193, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">@James Morris</span> - </strong> - </p> - </content> - </td> - </tr> - </table> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="176" height="56" topLeftX="707" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="176" height="56" topLeftX="505" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="176" height="56" topLeftX="284" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="176" height="56" topLeftX="44" topLeftY="179" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>在这里输入简要说明,为您的听众提供上下文。</p> - </content> - </shape> - <shape width="574" height="58" topLeftX="54" topLeftY="56" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>解决方案 3:提升品牌声誉</p> - </content> - </shape> - <shape width="209" height="30" topLeftX="48" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p>多平台宣传</p> - </content> - </shape> - <shape width="199" height="30" topLeftX="280" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p>与顶级影响者合作</p> - </content> - </shape> - <shape width="120" height="30" topLeftX="512" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="12"> SEO </span> - </strong> - </p> - </content> - </shape> - <shape width="120" height="30" topLeftX="717" topLeftY="331" presetHandlers="30" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(43, 47, 54, 1) 0%,rgba(66, 71, 85, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p>用户推荐</p> - </content> - </shape> - <line startX="491" startY="175" endX="491" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="269" startY="175" endX="269" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="695" startY="175" endX="695" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="34" startY="175" endX="34" endY="360" alpha="0.3"> - <border color="rgba(143, 149, 158, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="LMSIbPjSEom7ekxw6g1ceS4SnVb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="391" height="97" topLeftX="59" topLeftY="302" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.2"> - <p>总结</p> - </content> - </shape> - <shape width="391" height="140" topLeftX="59" topLeftY="178" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="100" color="rgba(255, 255, 255, 0.349)" bold="true" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 0.349)" fontSize="100">04</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="WROlbzmWGo7UP1xNkmPcRZ5MnHg" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="C7AYboTrdo4cP6x2onlczGOlnld" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="679" height="132" topLeftX="47" topLeftY="343" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p>谢谢!</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/product--market_analysis.xml b/skills/lark-slides/assets/templates/product--market_analysis.xml deleted file mode 100644 index af93affe1..000000000 --- a/skills/lark-slides/assets/templates/product--market_analysis.xml +++ /dev/null @@ -1,898 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>市场分析报告 - - - - - - - <headline fontColor="#000000FF" fontSize="48"/> - <sub-headline fontColor="#000000FF" fontSize="24"/> - <body fontColor="#000000FF" fontSize="14"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="SH0hbfYtUopLybxGlKLctZ7cnHc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="798" height="96" topLeftX="39" topLeftY="364" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.4" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="54">市场分析报告</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="DyxKbGBEeogZI6xH8TvcRTQwnsc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="44" startY="495" endX="926" endY="494" alpha="0.34"> - <border color="rgba(255, 255, 255, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="502" height="38" topLeftX="49" topLeftY="167" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="369" height="85" topLeftX="49" topLeftY="88" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="48">目录</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="116" topLeftX="480" topLeftY="339" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">目标客户</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">客户画像</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">人口统计特征</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">心理和行为特征</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="231" height="92" topLeftX="49" topLeftY="339" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">背景信息</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">市场规模</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span color="rgba(255, 255, 255, 1)" fontSize="12">市场趋势</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="356" height="53" topLeftX="49" topLeftY="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true" lineSpacing="multiple:1.35"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">市场分析</span> - </strong> - </p> - </content> - </shape> - <shape width="356" height="53" topLeftX="480" topLeftY="270" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>客户分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </style> - <data> - <img src="Pkrjbk4e2oBx4ExptU6cxit7nic" width="387" height="540" topLeftX="575" topLeftY="0"> - <crop type="rect" leftOffset="76" rightOffset="76" topOffset="0" bottomOffset="0"/> - </img> - <shape width="228" height="38" topLeftX="46" topLeftY="385" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="469" height="96" topLeftX="40" topLeftY="409" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p>市场分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="Kjh0bv8UAohccvxKC67c2EmLnle" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="343" height="343" topLeftX="83" topLeftY="108" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="257" height="257" topLeftX="126" topLeftY="194" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="146" height="146" topLeftX="182" topLeftY="306" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="78" height="41" topLeftX="215" topLeftY="134" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>低端市场</p> - </content> - </shape> - <shape width="78" height="41" topLeftX="215" topLeftY="246" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>中端市场</p> - </content> - </shape> - <shape width="78" height="41" topLeftX="215" topLeftY="358" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p>高端市场</p> - </content> - </shape> - <line startX="371" startY="154" endX="416" endY="154"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="426" startY="266" endX="472" endY="266"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="394" startY="379" endX="440" endY="379"> - <border color="rgba(255, 255, 255, 1)" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="297" height="56" topLeftX="509" topLeftY="159" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="78" height="52" topLeftX="433" topLeftY="129" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)">60%</span> - </p> - </content> - </shape> - <shape width="165" height="41" topLeftX="509" topLeftY="129" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">低客单价、竞争激烈</span> - </strong> - </p> - </content> - </shape> - <shape width="297" height="56" topLeftX="558" topLeftY="270" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="78" height="52" topLeftX="482" topLeftY="240" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)">30%</span> - </p> - </content> - </shape> - <shape width="165" height="41" topLeftX="558" topLeftY="240" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">稳定增长、高复购率</span> - </strong> - </p> - </content> - </shape> - <shape width="297" height="56" topLeftX="521" topLeftY="383" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="78" height="52" topLeftX="445" topLeftY="354" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="right"> - <p> - <span color="rgba(255, 255, 255, 1)">10%</span> - </p> - </content> - </shape> - <shape width="165" height="41" topLeftX="521" topLeftY="353" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)">高客单价、高用户粘性</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </style> - <data> - <img src="DORCbvo8loYXudxUImpc8qxJnUc" width="635" height="426" topLeftX="275" topLeftY="68" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="278" height="56" topLeftX="50" topLeftY="396" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="311" height="85" topLeftX="50" topLeftY="327" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>主要城市</p> - </content> - </shape> - <shape width="8" height="8" topLeftX="348" topLeftY="228" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="12" topLeftX="344" topLeftY="211" rotation="180" type="triangle"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(13, 71, 219, 1) 0%,rgba(125, 0, 250, 1) 100%)"/> - </fill> - </shape> - <shape width="140" height="35" topLeftX="282" topLeftY="177" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(13, 71, 219, 1) 0%,rgba(125, 0, 250, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">城市 A</span> - </strong> - </p> - </content> - </shape> - <shape width="8" height="8" topLeftX="584" topLeftY="328" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="12" topLeftX="580" topLeftY="311" rotation="180" type="triangle"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(13, 71, 219, 1) 0%,rgba(125, 0, 250, 1) 100%)"/> - </fill> - </shape> - <shape width="140" height="35" topLeftX="518" topLeftY="277" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(13, 71, 219, 1) 0%,rgba(125, 0, 250, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">城市 B</span> - </strong> - </p> - </content> - </shape> - <shape width="8" height="8" topLeftX="810" topLeftY="255" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="12" topLeftX="806" topLeftY="238" rotation="180" type="triangle"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(13, 71, 219, 1) 0%,rgba(125, 0, 250, 1) 100%)"/> - </fill> - </shape> - <shape width="140" height="35" topLeftX="744" topLeftY="204" type="slides-full-round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(13, 71, 219, 1) 0%,rgba(125, 0, 250, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">城市 C</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </style> - <data> - <img src="EtfBbjdtioRG0jxaIVZc2PH4n7g" width="82" height="82" topLeftX="51" topLeftY="231"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="79"/> - </img> - <img src="UrvkbSqqvoWi3rx0InicJttEnLd" width="82" height="82" topLeftX="51" topLeftY="366"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="80"/> - </img> - <img src="WHrJbggL9olprnxo52mcd8JXnbd" width="82" height="82" topLeftX="611" topLeftY="231"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="81"/> - </img> - <img src="JRTLb4j0VoEnYGxV3bRccy61nGg" width="82" height="82" topLeftX="331" topLeftY="366"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="81"/> - </img> - <img src="RWvwbf1tUo3v7xxl5kpcdPrEn5c" width="82" height="82" topLeftX="331" topLeftY="231"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0.15" bottomOffset="0.15" presetHandlers="81"/> - </img> - <shape width="224" height="41" topLeftX="144" topLeftY="237" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手 #1</span> - </p> - </content> - </shape> - <shape width="224" height="38" topLeftX="144" topLeftY="268" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">规模 500 - 1,000</span> - </p> - </content> - </shape> - <shape width="224" height="41" topLeftX="424" topLeftY="237" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手 #2</span> - </p> - </content> - </shape> - <shape width="224" height="38" topLeftX="424" topLeftY="268" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">规模 500 - 1,000</span> - </p> - </content> - </shape> - <shape width="224" height="41" topLeftX="144" topLeftY="372" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手 #4</span> - </p> - </content> - </shape> - <shape width="224" height="38" topLeftX="144" topLeftY="403" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">规模 500 - 1,000</span> - </p> - </content> - </shape> - <shape width="224" height="41" topLeftX="424" topLeftY="372" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手 #5</span> - </p> - </content> - </shape> - <shape width="224" height="38" topLeftX="424" topLeftY="403" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">规模 500 - 1,000</span> - </p> - </content> - </shape> - <shape width="224" height="41" topLeftX="704" topLeftY="237" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手 #3</span> - </p> - </content> - </shape> - <shape width="224" height="38" topLeftX="704" topLeftY="268" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">规模 500 - 1,000</span> - </p> - </content> - </shape> - <shape width="224" height="41" topLeftX="704" topLeftY="372" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手 #6</span> - </p> - </content> - </shape> - <shape width="224" height="38" topLeftX="704" topLeftY="403" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)">规模 500 - 1,000</span> - </p> - </content> - </shape> - <shape width="305" height="56" topLeftX="331" topLeftY="103" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="238" height="85" topLeftX="49" topLeftY="88" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">竞争对手</span> - </p> - </content> - </shape> - <img src="OEb0bN9TXoDw7yxlPyWcrISqnXf" width="82" height="82" topLeftX="611" topLeftY="366"> - <crop type="rect" leftOffset="5" rightOffset="5" topOffset="5" bottomOffset="5" presetHandlers="81"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </style> - <data> - <img src="ICt2bHN2nouTrXxguMVc8ObJnHd" width="387" height="540" topLeftX="575" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="153" topOffset="0" bottomOffset="0"/> - </img> - <shape width="228" height="38" topLeftX="46" topLeftY="385" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - <shape width="469" height="96" topLeftX="40" topLeftY="409" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.4"> - <p>客户分析</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </style> - <data> - <shape width="228" height="56" topLeftX="639" topLeftY="433" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="228" height="41" topLeftX="639" topLeftY="402" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p>新一线居民</p> - </content> - </shape> - <shape width="228" height="56" topLeftX="639" topLeftY="212" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="228" height="41" topLeftX="639" topLeftY="181" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p>高学历</p> - </content> - </shape> - <shape width="197" height="74" topLeftX="44" topLeftY="268" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="369" height="52" topLeftX="44" topLeftY="218" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p>用户画像</p> - </content> - </shape> - <shape width="60" height="60" topLeftX="639" topLeftY="116" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="24">1</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="639" topLeftY="327" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(31, 35, 41, 1)" bold="true"> - <p> - <strong> - <span fontSize="24">2</span> - </strong> - </p> - </content> - </shape> - <img src="QqUmbL49Po5gsnxNb34c4PEInbd" width="269" height="447" topLeftX="306" topLeftY="63"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="2" bottomOffset="2"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(0, 0, 0, 1)"/> - </fill> - </style> - <data> - <shape width="305" height="56" topLeftX="443" topLeftY="72" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(255, 255, 255, 1)">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="342" height="85" topLeftX="49" topLeftY="58" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p> - <span color="rgba(255, 255, 255, 1)">人口特征分析</span> - </p> - </content> - </shape> - <shape width="126" height="53" topLeftX="49" topLeftY="180" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">28M</span> - </p> - </content> - </shape> - <shape width="126" height="41" topLeftX="49" topLeftY="212" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">人口规模</span> - </p> - </content> - </shape> - <shape width="126" height="53" topLeftX="50" topLeftY="283" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>9</p> - </content> - </shape> - <shape width="126" height="41" topLeftX="50" topLeftY="314" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p>年平均消费次数</p> - </content> - </shape> - <shape width="126" height="53" topLeftX="49" topLeftY="390" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35" textAlign="center"> - <p>9</p> - </content> - </shape> - <shape width="126" height="41" topLeftX="49" topLeftY="422" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p>预计市场占有率</p> - </content> - </shape> - <shape width="12" height="12" topLeftX="676" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(83, 23, 255, 1)"/> - </fill> - </shape> - <shape width="120" height="38" topLeftX="688" topLeftY="143" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span fontSize="12">团队 A</span> - </p> - </content> - </shape> - <shape width="12" height="12" topLeftX="779" topLeftY="156" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="120" height="38" topLeftX="791" topLeftY="143" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">团队 B</span> - </p> - </content> - </shape> - <line startX="266" startY="212" endX="926" endY="212" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="51" height="41" topLeftX="215" topLeftY="192" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">60</span> - </p> - </content> - </shape> - <line startX="266" startY="283" endX="926" endY="283" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="51" height="41" topLeftX="215" topLeftY="263" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">40</span> - </p> - </content> - </shape> - <line startX="266" startY="356" endX="926" endY="356" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="51" height="41" topLeftX="215" topLeftY="335" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">20</span> - </p> - </content> - </shape> - <line startX="266" startY="427" endX="926" endY="427" alpha="0.38"> - <border color="rgba(143, 149, 158, 1)" dashArray="dash" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="51" height="41" topLeftX="215" topLeftY="406" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">0</span> - </p> - </content> - </shape> - <shape width="51" height="41" topLeftX="311" topLeftY="427" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">Q4</span> - </p> - </content> - </shape> - <shape width="51" height="41" topLeftX="441" topLeftY="427" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">Q1</span> - </p> - </content> - </shape> - <shape width="51" height="41" topLeftX="570" topLeftY="427" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">Q2</span> - </p> - </content> - </shape> - <shape width="51" height="41" topLeftX="700" topLeftY="427" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">Q3</span> - </p> - </content> - </shape> - <shape width="51" height="41" topLeftX="830" topLeftY="427" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" textAlign="center"> - <p> - <span color="rgba(255, 255, 255, 1)">Q4</span> - </p> - </content> - </shape> - <shape width="16" height="50" topLeftX="318" topLeftY="378" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="26" topLeftX="339" topLeftY="402" type="rect"> - <fill> - <fillColor color="rgba(83, 23, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="97" topLeftX="448" topLeftY="330" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="51" topLeftX="469" topLeftY="376" type="rect"> - <fill> - <fillColor color="rgba(83, 23, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="116" topLeftX="578" topLeftY="311" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="116" topLeftX="598" topLeftY="311" type="rect"> - <fill> - <fillColor color="rgba(83, 23, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="116" topLeftX="708" topLeftY="311" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="164" topLeftX="728" topLeftY="263" type="rect"> - <fill> - <fillColor color="rgba(83, 23, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="194" topLeftX="837" topLeftY="233" type="rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="16" height="179" topLeftX="857" topLeftY="248" type="rect"> - <fill> - <fillColor color="rgba(83, 23, 255, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="SHObbS1FeoEAQExWHbpccnM6nxc" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="231" height="62" topLeftX="49" topLeftY="362" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="275" height="56" topLeftX="49" topLeftY="167" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="369" height="85" topLeftX="49" topLeftY="88" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.35"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="48">总结 & 建议</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="62" topLeftX="365" topLeftY="362" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="49" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">聚焦中端市场 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="62" topLeftX="652" topLeftY="362" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="365" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">聚焦中端市场 #</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">2</span> - </strong> - </p> - </content> - </shape> - <shape width="202" height="41" topLeftX="652" topLeftY="336" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">聚焦中端市场 #</span> - </strong> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">3</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="BnCPbgKjioXfPDxXqgYc0Nenn4c" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="797" height="85" topLeftX="29" topLeftY="93" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="54" bold="true" lineSpacing="multiple:1.4"> - <p lineSpacing="multiple:1.2" letterSpacing="2"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="54">感谢观看</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/product--product_analysis.xml b/skills/lark-slides/assets/templates/product--product_analysis.xml deleted file mode 100644 index 5f0abecf9..000000000 --- a/skills/lark-slides/assets/templates/product--product_analysis.xml +++ /dev/null @@ -1,1537 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>产品分析报告 - - - - - - - <headline fontColor="#000000FF" fontSize="36"/> - <sub-headline fontColor="#000000FF" fontSize="20"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="CeKhbKPBboW8zMxwnIsckRXjnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="557" height="557" topLeftX="470" topLeftY="132" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="514" height="514" topLeftX="646" topLeftY="-103" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="11" height="11" topLeftX="641" topLeftY="146" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="397" height="56" topLeftX="30" topLeftY="428" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(242, 243, 245, 1)"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">报告目的和背景:说明本次报告的目的,例如对特定产品进行详细分析,以评估其市场地位和潜在机会</span> - </p> - </content> - </shape> - <shape width="640" height="110" topLeftX="30" topLeftY="320" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="90" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1" letterSpacing="2"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="90">产品分析报告</span> - </strong> - </p> - </content> - </shape> - <shape width="162" height="39" topLeftX="30" topLeftY="28" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p list="none" textAlign="left"> - <span color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">你的团队</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="TWMbb5BUwoVGv2xyYwFcPJN0nfh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="449" height="449" topLeftX="532" topLeftY="88" alpha="0.15" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="514" height="514" topLeftX="626" topLeftY="-123" alpha="0.15" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="82" height="82" topLeftX="67" topLeftY="405" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <shape width="42" height="42" topLeftX="182" topLeftY="397" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <shape width="181" height="74" topLeftX="87" topLeftY="187" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="181" height="74" topLeftX="83" topLeftY="122" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span fontSize="45">目录</span> - </strong> - </p> - </content> - </shape> - <shape width="30" height="30" topLeftX="406" topLeftY="131" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(222, 235, 255, 1) 0%,rgba(255, 255, 255, 1) 0%,rgba(223, 236, 255, 1) 57%,rgba(215, 231, 255, 1) 100%,rgba(144, 188, 255, 1) 100%,rgba(182, 211, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="219" height="40" topLeftX="415" topLeftY="131" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong>产品概述</strong> - </p> - </content> - </shape> - <shape width="222" height="74" topLeftX="412" topLeftY="169" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="30" height="30" topLeftX="663" topLeftY="131" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(222, 235, 255, 1) 0%,rgba(255, 255, 255, 1) 0%,rgba(223, 236, 255, 1) 57%,rgba(215, 231, 255, 1) 100%,rgba(144, 188, 255, 1) 100%,rgba(182, 211, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="219" height="40" topLeftX="672" topLeftY="131" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong>市场分析</strong> - </p> - </content> - </shape> - <shape width="222" height="74" topLeftX="669" topLeftY="169" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="30" height="30" topLeftX="406" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(222, 235, 255, 1) 0%,rgba(255, 255, 255, 1) 0%,rgba(223, 236, 255, 1) 57%,rgba(215, 231, 255, 1) 100%,rgba(144, 188, 255, 1) 100%,rgba(182, 211, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="219" height="40" topLeftX="415" topLeftY="284" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong>竞争分析</strong> - </p> - </content> - </shape> - <shape width="222" height="74" topLeftX="412" topLeftY="321" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="30" height="30" topLeftX="663" topLeftY="284" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(222, 235, 255, 1) 0%,rgba(255, 255, 255, 1) 0%,rgba(223, 236, 255, 1) 57%,rgba(215, 231, 255, 1) 100%,rgba(144, 188, 255, 1) 100%,rgba(182, 211, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="219" height="40" topLeftX="672" topLeftY="284" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong>建议与措施</strong> - </p> - </content> - </shape> - <shape width="222" height="74" topLeftX="669" topLeftY="321" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeKhbKPBboW8zMxwnIsckRXjnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="271" height="271" topLeftX="831" topLeftY="100" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="619" height="619" topLeftX="411" topLeftY="247" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="11" height="11" topLeftX="832" topLeftY="265" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="200" height="74" topLeftX="70" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="692" height="92" topLeftX="70" topLeftY="62" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="60">产品概述</span> - </strong> - </p> - </content> - </shape> - <shape width="291" height="160" topLeftX="647" topLeftY="362" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="140" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1" letterSpacing="2" textAlign="right"> - <p>01</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="H63mb66AvoxSqoxsg77cGpftnWO" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="589" height="589" topLeftX="-40" topLeftY="316" rotation="90" alpha="0.15" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="277" height="277" topLeftX="-21" topLeftY="168" rotation="90" alpha="0.15" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="10" height="10" topLeftX="28" topLeftY="411" rotation="90" alpha="0.93" type="ellipse"> - <fill> - <fillColor color="rgba(226, 234, 249, 1)"/> - </fill> - </shape> - <shape width="43" height="49" topLeftX="490" topLeftY="315" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" fontSize="24">↑</span> - </strong> - </p> - </content> - </shape> - <shape width="43" height="49" topLeftX="687" topLeftY="315" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" lineSpacing="multiple:1.2" textAlign="left"> - <p lineSpacing="multiple:1.2"> - <strong> - <span color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" fontSize="24">↑</span> - </strong> - </p> - </content> - </shape> - <img src="Tk6zbOJdRoVYW6xa5FvcVRnFneh" width="315" height="420" topLeftX="60" topLeftY="57"> - <crop type="rect" leftOffset="0.68" rightOffset="0.68" topOffset="0" bottomOffset="0" presetHandlers="16"/> - </img> - <shape width="129" height="40" topLeftX="500" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2"> - <p> - <strong> - <span fontSize="16">增长</span> - </strong> - <strong> - <span fontSize="16">率</span> - </strong> - </p> - </content> - </shape> - <shape width="352" height="74" topLeftX="490" topLeftY="173" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">描述你的产品定位、使用场景、特点、功能等。描述你的产品定位、使用场景、特点、功能等。描述你的产品定位、使用场景、特点、功能等。</span> - </p> - </content> - </shape> - <shape width="432" height="64" topLeftX="490" topLeftY="113" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span fontSize="36">产品介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="130" height="38" topLeftX="686" topLeftY="397" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">相关细节信息描述</span> - </p> - </content> - </shape> - <shape width="130" height="38" topLeftX="500" topLeftY="397" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">相关细节信息描述</span> - </p> - </content> - </shape> - <shape width="128" height="78" topLeftX="714" topLeftY="293" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" fontSize="48">120</span> - </strong> - </p> - </content> - </shape> - <shape width="128" height="78" topLeftX="517" topLeftY="293" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" fontSize="48">80%</span> - </strong> - </p> - </content> - </shape> - <shape width="129" height="40" topLeftX="698" topLeftY="371" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2"> - <p>增长量</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="GI0MbgUiqoP9hsxYaGjcMcrOnTf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="212" height="212" topLeftX="374" topLeftY="168" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" dashArray="dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="182" height="182" topLeftX="389" topLeftY="184" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <line startX="335" startY="128" endX="405" endY="198"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="555" startY="350" endX="625" endY="420"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="405" startY="350" endX="335" endY="420"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="625" startY="128" endX="555" endY="198"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <icon width="135" height="135" topLeftX="67" topLeftY="75" alpha="0.38" iconType="iconpark/Abstract/cycle-one.svg"> - <border color="rgba(226, 234, 249, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="140" height="140" topLeftX="63" topLeftY="294" alpha="0.38" iconType="iconpark/Abstract/two-ellipses.svg"> - <border color="rgba(226, 234, 249, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="136" height="136" topLeftX="785" topLeftY="299" alpha="0.38" iconType="iconpark/Charts/data-all.svg"> - <border color="rgba(226, 234, 249, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="134" height="134" topLeftX="786" topLeftY="75" alpha="0.38" iconType="iconpark/Office/application-effect.svg"> - <border color="rgba(226, 234, 249, 1)" width="6" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="241" height="56" topLeftX="76" topLeftY="142" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="110" topLeftY="110" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="right"> - <p>二级观点 #1</p> - </content> - </shape> - <shape width="91" height="97" topLeftX="434" topLeftY="221" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p>产品特点</p> - </content> - </shape> - <shape width="241" height="56" topLeftX="76" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="110" topLeftY="357" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="right"> - <p>二级观点 #2</p> - </content> - </shape> - <shape width="241" height="56" topLeftX="644" topLeftY="142" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="644" topLeftY="110" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="left"> - <p>二级观点 #3</p> - </content> - </shape> - <shape width="241" height="56" topLeftX="644" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="644" topLeftY="357" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="left"> - <p>二级观点 #4</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="AJEbbuSXXouiGbx4bXNcouexn0g" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="QvCWbM5xqoVaJzxvKBXcIGiBnLf" width="367" height="540" topLeftX="593" topLeftY="0" saturation="-16" temperature="28"> - <crop type="rect" leftOffset="21" rightOffset="26" topOffset="0" bottomOffset="74"/> - </img> - <shape width="269" height="56" topLeftX="85" topLeftY="170" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>确定产品的目标用户群体,并说明产品在市场中的定位和竞争优势。</p> - </content> - </shape> - <shape width="432" height="64" topLeftX="85" topLeftY="100" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p>用户画像</p> - </content> - </shape> - <shape width="298" height="39" topLeftX="85" topLeftY="299" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2"> - <p>用户画像</p> - </content> - </shape> - <shape width="298" height="94" topLeftX="85" topLeftY="343" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:2"> - <ul> - <li> - <p lineSpacing="multiple:2"> - <span fontSize="12">关键核心描述</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span fontSize="12">关键核心描述</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span fontSize="12">关键核心描述</span> - </p> - </li> - </ul> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeKhbKPBboW8zMxwnIsckRXjnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="271" height="271" topLeftX="831" topLeftY="100" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="619" height="619" topLeftX="411" topLeftY="247" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="11" height="11" topLeftX="832" topLeftY="265" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="200" height="74" topLeftX="70" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="692" height="92" topLeftX="70" topLeftY="62" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="60">市场分析</span> - </strong> - </p> - </content> - </shape> - <shape width="291" height="160" topLeftX="647" topLeftY="362" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="140" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1" letterSpacing="2" textAlign="right"> - <p>02</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="FooxbXPOJoYY0RxELmOcRJaEnNe" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="960" height="253" topLeftX="0" topLeftY="0" type="rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <img src="NcsLb3VSRoeJEVxfOuTc1ISdnPf" width="960" height="253" topLeftX="0" topLeftY="0" alpha="0.5"> - <crop type="rect" leftOffset="85" rightOffset="12" topOffset="25" bottomOffset="0"/> - </img> - <shape width="269" height="56" topLeftX="53" topLeftY="370" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="432" height="64" topLeftX="53" topLeftY="300" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p>目标市场</p> - </content> - </shape> - <shape width="392" height="39" topLeftX="490" topLeftY="311" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2"> - <p>描述的目标市场</p> - </content> - </shape> - <shape width="298" height="94" topLeftX="490" topLeftY="355" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" lineSpacing="multiple:2"> - <ul> - <li> - <p lineSpacing="multiple:2">关键核心描述</p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span fontSize="12">关键核心描述</span> - </p> - </li> - <li> - <p lineSpacing="multiple:2"> - <span fontSize="12">关键核心描述</span> - </p> - </li> - </ul> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="QPp4bfbR9ocU43xZdn1cHZZxnYd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="570" height="570" topLeftX="-30" topLeftY="70" alpha="0.6" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="420" height="420" topLeftX="43" topLeftY="220" alpha="0.6" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="258" height="258" topLeftX="127" topLeftY="382" alpha="0.6" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="330" height="47" topLeftX="594" topLeftY="122" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true"> - <p>关键结论 #1</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="152" topLeftY="447" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="center"> - <p>高端市场</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="152" topLeftY="312" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="center"> - <p>中端市场</p> - </content> - </shape> - <shape width="212" height="40" topLeftX="152" topLeftY="158" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" lineSpacing="multiple:1.2" textAlign="center"> - <p>低端市场</p> - </content> - </shape> - <shape width="110" height="68" topLeftX="203" topLeftY="396" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p>10%</p> - </content> - </shape> - <shape width="110" height="68" topLeftX="203" topLeftY="260" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p>30%</p> - </content> - </shape> - <shape width="110" height="68" topLeftX="203" topLeftY="106" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="40" color="linear-gradient(0deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p>60%</p> - </content> - </shape> - <shape width="309" height="56" topLeftX="594" topLeftY="295" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="330" height="47" topLeftX="594" topLeftY="263" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true"> - <p>关键结论 #2</p> - </content> - </shape> - <shape width="309" height="56" topLeftX="594" topLeftY="153" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="309" height="56" topLeftX="594" topLeftY="442" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</p> - </content> - </shape> - <shape width="330" height="47" topLeftX="594" topLeftY="410" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true"> - <p>关键结论 #3</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="LeJHbiXkToox4uxb12Oc7AVUnqf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <line startX="933" startY="101" endX="29" endY="102" alpha="0.1"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="933" startY="326" endX="29" endY="327" alpha="0.1"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="933" startY="209" endX="29" endY="210" alpha="0.1"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="19" height="19" topLeftX="54" topLeftY="124" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <shape width="19" height="19" topLeftX="54" topLeftY="235" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <shape width="19" height="19" topLeftX="54" topLeftY="354" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - </shape> - <line startX="924" startY="442" endX="20" endY="443" alpha="0.1"> - <border width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="439" height="56" topLeftX="395" topLeftY="375" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul> - <li> - <p> - <span fontSize="12">这是指机器学习模型为其预测和决策提供解释的能力</span> - </p> - </li> - <li> - <p> - <span fontSize="12">它可以提高人工智能系统的透明度和可信度,以及识别和纠正错误或偏见</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="439" height="56" topLeftX="395" topLeftY="257" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul> - <li> - <p> - <span fontSize="12">这是一个帮助程序员编写、调试和优化代码的工具</span> - </p> - </li> - <li> - <p> - <span fontSize="12">它可以提供诸如代码自动完成、纠错、性能改进、文档生成等功能。</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="439" height="56" topLeftX="395" topLeftY="145" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <ul> - <li> - <p> - <span fontSize="12">这是一种人工智能技术,可以创造新的内容,如文本、图像、视频或音频。它可用于文案写作、音乐、药物发现等任务。</span> - </p> - </li> - </ul> - </content> - </shape> - <shape width="218" height="40" topLeftX="184" topLeftY="374" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span fontSize="16">解释型 AI</span> - </strong> - </p> - </content> - </shape> - <shape width="218" height="40" topLeftX="184" topLeftY="257" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span fontSize="16">AI 编码助手</span> - </strong> - </p> - </content> - </shape> - <shape width="218" height="40" topLeftX="184" topLeftY="144" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span fontSize="16">生成式 AI</span> - </strong> - </p> - </content> - </shape> - <shape width="110" height="56" topLeftX="71" topLeftY="366" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true"> - <p> - <strong> - <span fontSize="24">趋势 #</span> - </strong> - <strong> - <span fontSize="24">3</span> - </strong> - </p> - </content> - </shape> - <shape width="110" height="56" topLeftX="71" topLeftY="248" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true"> - <p> - <strong> - <span fontSize="24">趋势 #</span> - </strong> - <strong> - <span fontSize="24">2</span> - </strong> - </p> - </content> - </shape> - <shape width="110" height="56" topLeftX="71" topLeftY="136" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="true"> - <p> - <strong> - <span fontSize="24">趋势 #1</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeKhbKPBboW8zMxwnIsckRXjnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="271" height="271" topLeftX="831" topLeftY="100" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="619" height="619" topLeftX="411" topLeftY="247" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="11" height="11" topLeftX="832" topLeftY="265" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="200" height="74" topLeftX="70" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="692" height="92" topLeftX="70" topLeftY="62" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="60">竞争分析</span> - </strong> - </p> - </content> - </shape> - <shape width="291" height="160" topLeftX="647" topLeftY="362" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="140" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1" letterSpacing="2" textAlign="right"> - <p>03</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="ZQekbiWtbo1NMUxcr8NccVqdnDr" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="552" height="38" topLeftX="26" topLeftY="135" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>主要竞争对手和市场份额:列举产品的主要竞争对手,并分析他们在市场中的地位和市场份额。</p> - </content> - </shape> - <shape width="432" height="59" topLeftX="26" topLeftY="85" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" bold="true" lineSpacing="multiple:1.2"> - <p>竞争对手</p> - </content> - </shape> - <table topLeftX="26" topLeftY="198"> - <colgroup> - <col span="4" width="224"/> - </colgroup> - <tr height="41"> - <td> - <borderTop color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(45, 78, 249, 1)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">竞争对手</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(45, 78, 249, 1)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">2025</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="rgba(45, 78, 249, 1)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">2026</span> - </strong> - </p> - </content> - </td> - <td> - <borderTop color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderRight color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(45, 78, 249, 1)" lineJoin="miter" miterLimit="10"/> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="14">相关细节</span> - </strong> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="true"> - <p> - <strong> - <span fontSize="12">竞争对手 A</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">30M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">32M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="true"> - <p> - <strong> - <span fontSize="12">竞争对手 B</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">45M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">40M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="true"> - <p> - <strong> - <span fontSize="12">竞争对手 C</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">15M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">30M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">更多细节描述</span> - </p> - </content> - </td> - </tr> - <tr height="46"> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderLeft color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" bold="true"> - <p> - <strong> - <span fontSize="12">竞争对手 D</span> - </strong> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">60M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">66M</span> - </p> - </content> - </td> - <td> - <borderRight color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <borderBottom color="rgba(176, 194, 225, 1)" lineJoin="miter" miterLimit="10"/> - <content verticalAlign="top" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span fontSize="12">更多细节描述</span> - </p> - </content> - </td> - </tr> - </table> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="824" height="416" topLeftX="68" topLeftY="62" presetHandlers="16" alpha="0.54" type="round-rect"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(222, 235, 255, 1) 0%,rgba(229, 238, 253, 1) 0%,rgba(214, 226, 244, 1) 70%,rgba(144, 188, 255, 1) 100%,rgba(214, 230, 255, 1) 100%)"/> - </fill> - </shape> - <shape width="100" height="34" topLeftX="436" topLeftY="20" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(0, 0, 0, 1)" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="12">容易使用</span> - </strong> - </p> - </content> - </shape> - <shape width="94" height="34" topLeftX="876" topLeftY="253" rotation="90" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(0, 0, 0, 1)" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="12">高效率</span> - </strong> - </p> - </content> - </shape> - <shape width="100" height="34" topLeftX="436" topLeftY="483" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(0, 0, 0, 1)" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="12">难以使用</span> - </strong> - </p> - </content> - </shape> - <shape width="94" height="34" topLeftX="-10" topLeftY="254" rotation="270" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(0, 0, 0, 1)" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="12">低效率</span> - </strong> - </p> - </content> - </shape> - <line startX="90" startY="272" endX="870" endY="275" alpha="0.12"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="481" startY="462" endX="479" endY="78" alpha="0.12"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="67" height="67" topLeftX="652" topLeftY="94" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" color="rgba(242, 243, 245, 1)"> - <p> - <span color="rgba(242, 243, 245, 1)">A</span> - </p> - </content> - <shadow offset="4" blur="26" color="rgba(45, 78, 249, 0.18)"/> - </shape> - <shape width="104" height="38" topLeftX="634" topLeftY="157" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">你的产品</span> - </p> - </content> - </shape> - <shape width="56" height="56" topLeftX="800" topLeftY="143" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>B</p> - </content> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="778" topLeftY="196" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="544" topLeftY="183" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="508" topLeftY="211" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="39" height="45" topLeftX="541" topLeftY="177" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span fontSize="16">C</span> - </p> - </content> - </shape> - <shape width="64" height="64" topLeftX="267" topLeftY="90" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>D</p> - </content> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="247" topLeftY="149" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="104" height="38" topLeftX="332" topLeftY="244" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="368" topLeftY="220" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="38" height="44" topLeftX="365" topLeftY="215" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p>F</p> - </content> - </shape> - <shape width="67" height="67" topLeftX="139" topLeftY="164" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>E</p> - </content> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="121" topLeftY="226" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="74" height="74" topLeftX="708" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="30"> - <p> - <span fontSize="30">J</span> - </p> - </content> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="693" topLeftY="414" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="56" height="56" topLeftX="562" topLeftY="306" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16"> - <p>I</p> - </content> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="538" topLeftY="358" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="32" height="32" topLeftX="368" topLeftY="322" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="332" topLeftY="350" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - <shape width="38" height="44" topLeftX="365" topLeftY="316" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="16" textAlign="center"> - <p> - <span fontSize="16">H</span> - </p> - </content> - </shape> - <shape width="44" height="44" topLeftX="226" topLeftY="359" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14"> - <p> - <span fontSize="14">G</span> - </p> - </content> - <shadow offset="7" blur="7" color="rgba(165, 178, 244, 0.17)"/> - </shape> - <shape width="104" height="38" topLeftX="196" topLeftY="398" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p> - <span color="rgba(31, 35, 41, 1)">竞争对手</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeKhbKPBboW8zMxwnIsckRXjnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="271" height="271" topLeftX="831" topLeftY="100" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="619" height="619" topLeftX="411" topLeftY="247" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="11" height="11" topLeftX="832" topLeftY="265" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="200" height="74" topLeftX="70" topLeftY="150" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p> - <span color="rgba(242, 243, 245, 1)" fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="692" height="92" topLeftX="70" topLeftY="62" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p> - <strong> - <span color="rgba(242, 243, 245, 1)" fontSize="60">建议与措施</span> - </strong> - </p> - </content> - </shape> - <shape width="291" height="160" topLeftX="647" topLeftY="362" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="140" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1" letterSpacing="2" textAlign="right"> - <p>04</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <shape width="468" height="56" topLeftX="246" topLeftY="86" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="center"> - <p>(竞争对手的优势、劣势、机会和威胁):对竞争对手进行SWOT分析,评估他们的优势、劣势、面临的机会和威胁。</p> - </content> - </shape> - <shape width="432" height="54" topLeftX="264" topLeftY="45" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="28" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p> - <span fontSize="28">SWOT 分析</span> - </p> - </content> - </shape> - <shape width="173" height="173" topLeftX="333" topLeftY="177" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">S</span> - </strong> - </p> - </content> - </shape> - <shape width="173" height="173" topLeftX="454" topLeftY="177" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">W</span> - </strong> - </p> - </content> - </shape> - <shape width="173" height="173" topLeftX="454" topLeftY="301" type="ellipse"> - <fill> - <fillColor color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">O</span> - </strong> - </p> - </content> - </shape> - <shape width="173" height="173" topLeftX="333" topLeftY="301" flipX="true" type="ellipse"> - <fill> - <fillColor color="rgba(31, 35, 41, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">T</span> - </strong> - </p> - </content> - </shape> - <shape width="295" height="47" topLeftX="9" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" textAlign="right"> - <p>优势</p> - </content> - </shape> - <shape width="219" height="56" topLeftX="85" topLeftY="241" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p>专有的技术平台。具有深厚行业知识的强大团队 .低管理成本</p> - </content> - </shape> - <shape width="295" height="47" topLeftX="9" topLeftY="347" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" textAlign="right"> - <p>挑战</p> - </content> - </shape> - <shape width="219" height="74" topLeftX="85" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="right"> - <p>来自老牌企业的激烈竞争。不可预见的市场和经济条件。网络安全风险和潜在违规行为</p> - </content> - </shape> - <shape width="295" height="47" topLeftX="656" topLeftY="200" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" textAlign="left"> - <p>劣势</p> - </content> - </shape> - <shape width="219" height="74" topLeftX="656" topLeftY="241" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>拥挤的电子商务市场中的新进入者。品牌知名度有限。扩大经营规模的潜在问题</p> - </content> - </shape> - <shape width="295" height="47" topLeftX="656" topLeftY="347" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" textAlign="left"> - <p>机遇</p> - </content> - </shape> - <shape width="219" height="56" topLeftX="656" topLeftY="388" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p>不断增长的网上购物趋势。智能手机用户数量的增加。扩展到国际市场</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="PgVbbpypho2FaOxbrbmcPQpfnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="449" height="449" topLeftX="504" topLeftY="192" alpha="0.15" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="514" height="514" topLeftX="598" topLeftY="-19" alpha="0.15" type="ellipse"> - <border color="linear-gradient(90deg,rgba(46, 78, 246, 1) 0%,rgba(33, 130, 244, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="13" height="13" topLeftX="593" topLeftY="227" alpha="0.8" type="ellipse"> - <fill> - <fillColor color="rgba(226, 234, 249, 1)"/> - </fill> - </shape> - <shape width="581" height="56" topLeftX="43" topLeftY="120" alpha="0.5" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12"> - <p>提出建议和策略:根据市场洞察和机会与挑战分析,提出具体的建议和策略,以帮助企业在电子商务行业中取得竞争优势。例如,加强供应链管理,提升用户体验,拓展新兴市场等。</p> - </content> - </shape> - <shape width="583" height="64" topLeftX="43" topLeftY="50" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" bold="true" lineSpacing="multiple:1.2"> - <p>建议与措施</p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CeKhbKPBboW8zMxwnIsckRXjnwh" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="557" height="557" topLeftX="497" topLeftY="113" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" dashArray="long-dash" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="514" height="514" topLeftX="703" topLeftY="-204" alpha="0.51" type="ellipse"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="11" height="11" topLeftX="708" topLeftY="116" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="575" height="110" topLeftX="37" topLeftY="389" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="90" color="rgba(242, 243, 245, 1)" bold="true" lineSpacing="multiple:1" letterSpacing="2"> - <p>感谢您的观赏</p> - </content> - </shape> - <shape width="162" height="39" topLeftX="30" topLeftY="28" type="text"> - <content textType="caption" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" fontFamily="undefined" color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" bold="false" italic="false" underline="false" strikethrough="false" list="none" listStyle="circle-hollow-square" textAlign="left" autoFit="shape-auto-fit"> - <p list="none" textAlign="left"> - <span color="rgba(255, 255, 255, 1)" backgroundColor="rgba(0, 0, 0, 0)" fontSize="12" fontFamily="undefined" bold="false" italic="false" strikethrough="false" underline="false">你的团队</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/product--product_intro.xml b/skills/lark-slides/assets/templates/product--product_intro.xml deleted file mode 100644 index f419a5202..000000000 --- a/skills/lark-slides/assets/templates/product--product_intro.xml +++ /dev/null @@ -1,2838 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>产品介绍 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style> - <fill> - <fillImg src="NfQpb6aAAoZAcMxsdPvccrL2nFb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="64" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="36" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="200" height="30" topLeftX="722" topLeftY="24" type="text"> - <content textType="caption" fontSize="20" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" italic="false"> - <p textAlign="right">未来已至 感谢观看</p> - </content> - </shape> - <shape width="160" height="42" topLeftX="762" topLeftY="61" type="text"> - <content textType="caption" fontSize="14" fontFamily="Arial" color="rgba(222, 224, 227, 1)" italic="true"> - <p textAlign="right">The Future is Here. Thank you for Watching</p> - </content> - </shape> - <shape width="400" height="63" topLeftX="62" topLeftY="420" type="text"> - <content textType="caption" fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="648" height="60" topLeftX="62" topLeftY="261" type="text"> - <content textType="title" fontSize="40" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" italic="true"> - <p>Product Introduction</p> - </content> - </shape> - <shape width="648" height="90" topLeftX="62" topLeftY="166" type="text"> - <content textType="title" fontSize="60" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>产品介绍</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="CJRQbqIpcoDNJ6x6R8EcqhRMnAb" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="NIsYbsdhZoR2xJx1MBncO7kjnzd" width="687" height="406" topLeftX="42" topLeftY="0"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="121" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="531" height="54" topLeftX="214" topLeftY="136" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="center"> - <p textAlign="center"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">CONTENTS</span> - </p> - </content> - </shape> - <shape width="272" height="48" topLeftX="42" topLeftY="22" type="text"> - <content textType="headline" fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="32">目录</span> - </p> - </content> - </shape> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <line startX="87" startY="317" endX="840" endY="317"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="8" height="8" topLeftX="279" topLeftY="312" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="472" topLeftY="312" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="664" topLeftY="312" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="167" height="30" topLeftX="87" topLeftY="261" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">01 产品介绍</span> - </strong> - </p> - </content> - </shape> - <shape width="167" height="84" topLeftX="87" topLeftY="338" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">产品概述</span> - </p> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">核心能力</span> - </p> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">产品解决方案</span> - </p> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">产品发展历程</span> - </p> - </content> - </shape> - <shape width="167" height="30" topLeftX="283" topLeftY="261" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">02 产品优势</span> - </strong> - </p> - </content> - </shape> - <shape width="167" height="63" topLeftX="283" topLeftY="338" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">产品优势</span> - </p> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">行业地位</span> - </p> - <p> - <span color="rgba(222, 224, 227, 1)" fontSize="14">最佳实践</span> - </p> - </content> - </shape> - <shape width="167" height="30" topLeftX="472" topLeftY="261" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">03 产品费用</span> - </strong> - </p> - </content> - </shape> - <shape width="167" height="42" topLeftX="472" topLeftY="338" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>产品价格体系</p> - <p>客户评价</p> - </content> - </shape> - <shape width="167" height="30" topLeftX="664" topLeftY="261" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">04 未来展望</span> - </strong> - </p> - </content> - </shape> - <shape width="167" height="42" topLeftX="664" topLeftY="338" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>产品布局</p> - <p>未来展望</p> - </content> - </shape> - <shape width="8" height="8" topLeftX="87" topLeftY="312" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XZAxbIhLsok8UFxXIsvcb8r7nad" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="100" height="34" topLeftX="480" topLeftY="351" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">查看详情</span> - </p> - </content> - </shape> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="G9dVbubk3offfzxETDFciwB5n8d" width="328" height="368" topLeftX="83" topLeftY="87" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="20" rightOffset="20" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="431" height="42" topLeftX="480" topLeftY="270" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="431" height="40" topLeftX="480" topLeftY="202" type="text"> - <content textType="title" fontSize="40" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p>产品介绍</p> - </content> - </shape> - <shape width="431" height="54" topLeftX="480" topLeftY="145" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p textAlign="left">PART 1</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>核心能力</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="46" topLeftY="88" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="63" topLeftY="102" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">01 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="63" topLeftY="142" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="46" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="63" topLeftY="245" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">02 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="63" topLeftY="284" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="46" topLeftY="372" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="63" topLeftY="387" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">03 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="63" topLeftY="427" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="339" topLeftY="372" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="355" topLeftY="387" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">04 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="355" topLeftY="427" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="632" topLeftY="88" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="649" topLeftY="102" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">07 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="649" topLeftY="142" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="632" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="649" topLeftY="245" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">06 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="649" topLeftY="284" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="269" height="114" topLeftX="632" topLeftY="372" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="235" height="24" topLeftX="649" topLeftY="387" type="text"> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="16">05 核心能力</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="42" topLeftX="649" topLeftY="427" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述标题,输入相关的描述信息描述标题</p> - </content> - </shape> - <shape width="160" height="160" topLeftX="393" topLeftY="131" presetHandlers="88" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="140" height="140" topLeftX="403" topLeftY="141" presetHandlers="73" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <shadow offset="11" angle="90" blur="28" color="rgba(75, 112, 226, 0.51)"/> - </shape> - <icon width="41" height="41" topLeftX="452" topLeftY="170" iconType="iconpark/Base/all-application.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="114" height="30" topLeftX="416" topLeftY="215" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center">核心能力</p> - </content> - </shape> - <shape width="42" height="25" topLeftX="342" topLeftY="150" rotation="208" alpha="0.8" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0) 0%,rgba(74, 60, 243, 1) 100%)"/> - </fill> - </shape> - <shape width="42" height="25" topLeftX="347" topLeftY="265" rotation="149" alpha="0.8" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0) 0%,rgba(74, 60, 243, 1) 100%)"/> - </fill> - </shape> - <shape width="42" height="25" topLeftX="452" topLeftY="317" rotation="90" alpha="0.8" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0) 0%,rgba(74, 60, 243, 1) 100%)"/> - </fill> - </shape> - <shape width="39" height="25" topLeftX="566" topLeftY="150" rotation="149" flipX="true" alpha="0.8" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0) 0%,rgba(74, 60, 243, 1) 100%)"/> - </fill> - </shape> - <shape width="39" height="25" topLeftX="561" topLeftY="266" rotation="214" flipX="true" alpha="0.8" type="right-arrow"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0) 0%,rgba(74, 60, 243, 1) 100%)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>解决方案</p> - </content> - </shape> - <shape width="269" height="383" topLeftX="389" topLeftY="99" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="269" height="383" topLeftX="46" topLeftY="99" presetHandlers="8" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="100" height="30" topLeftX="131" topLeftY="124" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">过去</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="21" topLeftX="63" topLeftY="158" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center">输入相关的描述信息描述标题</p> - </content> - </shape> - <line startX="63" startY="141" endX="135" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="298" startY="141" endX="221" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="230" height="34" topLeftX="63" topLeftY="214" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">痛点一</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="230" height="34" topLeftX="63" topLeftY="275" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">痛点二</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="230" height="34" topLeftX="63" topLeftY="336" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">痛点三</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="230" height="34" topLeftX="63" topLeftY="397" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">痛点三</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="100" height="30" topLeftX="473" topLeftY="124" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" fontSize="20">现在</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="21" topLeftX="405" topLeftY="158" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center">输入相关的描述信息描述标题</p> - </content> - </shape> - <line startX="405" startY="141" endX="477" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="640" startY="141" endX="563" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="230" height="34" topLeftX="405" topLeftY="214" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">卖点一</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="230" height="34" topLeftX="405" topLeftY="275" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>卖点二</p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="230" height="34" topLeftX="405" topLeftY="336" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>卖点三</p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="230" height="34" topLeftX="405" topLeftY="397" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p>卖点四</p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="245" height="176" topLeftX="684" topLeftY="99" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="245" height="176" topLeftX="684" topLeftY="305" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <icon width="32" height="32" topLeftX="711" topLeftY="145" iconType="iconpark/Charts/chart-line.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="154" height="30" topLeftX="753" topLeftY="143" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span fontSize="20">全球排名</span> - </p> - </content> - </shape> - <shape width="154" height="44" topLeftX="753" topLeftY="184" type="text"> - <content textType="title" fontSize="44" fontFamily="Arial" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="false" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" fontSize="44" bold="false">3</span> - </p> - </content> - </shape> - <icon width="32" height="32" topLeftX="711" topLeftY="349" iconType="iconpark/Charts/chart-line.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="154" height="30" topLeftX="753" topLeftY="347" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <span fontSize="20">研发规模</span> - </p> - </content> - </shape> - <shape width="154" height="44" topLeftX="753" topLeftY="388" type="text"> - <content textType="title" fontSize="44" fontFamily="Arial" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="false" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" fontSize="44" bold="false">1000+</span> - </p> - </content> - </shape> - <shape width="63" height="48" topLeftX="321" topLeftY="267" type="text"> - <content fontSize="32" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="32">VS</span> - </strong> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left">产品发展历程</p> - </content> - </shape> - <line startX="-6" startY="149" endX="960" endY="149"> - <border color="rgba(155, 158, 162, 1)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="8" height="8" topLeftX="307" topLeftY="145" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="479" topLeftY="145" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="652" topLeftY="145" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="51" height="30" topLeftX="801" topLeftY="99" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20" fontFamily="Arial">2026</span> - </strong> - </p> - </content> - </shape> - <shape width="8" height="8" topLeftX="134" topLeftY="145" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="8" height="8" topLeftX="823" topLeftY="145" type="ellipse"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="51" height="30" topLeftX="631" topLeftY="99" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20" fontFamily="Arial">2025</span> - </strong> - </p> - </content> - </shape> - <shape width="51" height="30" topLeftX="462" topLeftY="99" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20" fontFamily="Arial">2024</span> - </strong> - </p> - </content> - </shape> - <shape width="51" height="30" topLeftX="285" topLeftY="99" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20" fontFamily="Arial">2023</span> - </strong> - </p> - </content> - </shape> - <shape width="51" height="30" topLeftX="112" topLeftY="99" type="text"> - <content fontSize="20" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" textAlign="left"> - <p>2022</p> - </content> - </shape> - <shape width="136" height="34" topLeftX="70" topLeftY="176" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="243" topLeftY="176" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="415" topLeftY="176" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="588" topLeftY="176" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="761" topLeftY="176" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="70" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="243" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="415" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="588" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="761" topLeftY="230" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="243" topLeftY="287" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="415" topLeftY="287" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="588" topLeftY="287" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="761" topLeftY="287" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="588" topLeftY="344" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="761" topLeftY="344" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - <shape width="136" height="34" topLeftX="588" topLeftY="403" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(208, 241, 247, 0.12) 0%,rgba(229, 228, 250, 0.2) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">产品能力</span> - </p> - </content> - <shadow offset="25" blur="26" color="rgba(33, 47, 64, 0.32)"/> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XZAxbIhLsok8UFxXIsvcb8r7nad" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="100" height="34" topLeftX="480" topLeftY="351" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">查看详情</span> - </p> - </content> - </shape> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="C8zPbiwfJoUX2xxi8UpckM0mnDb" width="328" height="368" topLeftX="83" topLeftY="87" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="108" bottomOffset="108" presetHandlers="8"/> - </img> - <shape width="431" height="42" topLeftX="480" topLeftY="270" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="431" height="40" topLeftX="480" topLeftY="202" type="text"> - <content textType="title" fontSize="40" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p>产品优势</p> - </content> - </shape> - <shape width="431" height="54" topLeftX="480" topLeftY="145" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p textAlign="left">PART 2</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left">产品优势</p> - </content> - </shape> - <shape width="269" height="254" topLeftX="42" topLeftY="179" presetHandlers="8" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="100" height="30" topLeftX="126" topLeftY="124" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">优势一</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="21" topLeftX="59" topLeftY="207" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong>输入相关的描述信息描述标题</strong> - </p> - </content> - </shape> - <line startX="59" startY="141" endX="131" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="294" startY="141" endX="217" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="77" height="18" topLeftX="56" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="74" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="83" topLeftY="262" iconType="iconpark/Charts/chart-line.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="137" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="155" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="165" topLeftY="262" iconType="iconpark/Charts/histogram.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="219" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="237" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="247" topLeftY="262" iconType="iconpark/Charts/material-three.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="56" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="74" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="83" topLeftY="354" iconType="iconpark/Charts/viencharts.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="137" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="155" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="164" topLeftY="354" iconType="iconpark/Clothes/vest.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="219" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="237" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="246" topLeftY="354" iconType="iconpark/Travel/flight-safety.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="269" height="254" topLeftX="343" topLeftY="179" presetHandlers="8" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.1)"/> - </fill> - <border color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="100" height="30" topLeftX="427" topLeftY="124" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">优势二</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="21" topLeftX="360" topLeftY="207" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong>输入相关的描述信息描述标题</strong> - </p> - </content> - </shape> - <line startX="360" startY="141" endX="432" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="595" startY="141" endX="518" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="77" height="18" topLeftX="357" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="375" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="385" topLeftY="262" iconType="iconpark/Base/home.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="438" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="456" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="466" topLeftY="262" iconType="iconpark/Base/hourglass-full.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="520" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="538" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="548" topLeftY="262" iconType="iconpark/Base/more-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="357" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="375" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="385" topLeftY="354" iconType="iconpark/Base/pic.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="438" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="456" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="466" topLeftY="354" iconType="iconpark/Base/all-application.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="520" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="538" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="548" topLeftY="354" iconType="iconpark/Base/aiming.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="269" height="254" topLeftX="644" topLeftY="179" presetHandlers="8" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="rgba(255, 255, 255, 0.1)"/> - </fill> - <border color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="100" height="30" topLeftX="728" topLeftY="124" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">优势三</span> - </strong> - </p> - </content> - </shape> - <shape width="235" height="21" topLeftX="661" topLeftY="207" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong>输入相关的描述信息描述标题</strong> - </p> - </content> - </shape> - <line startX="661" startY="141" endX="733" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <line startX="896" startY="141" endX="819" endY="141"> - <border color="linear-gradient(90deg,rgba(0, 209, 240, 0) 0%,rgba(147, 151, 244, 1) 100%)" width="1" lineCap="square" lineJoin="miter" miterLimit="10"/> - </line> - <shape width="77" height="18" topLeftX="658" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="676" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="686" topLeftY="262" iconType="iconpark/Office/file-txt.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="739" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="757" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="767" topLeftY="262" iconType="iconpark/Office/file-editing.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="821" topLeftY="300" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="839" topLeftY="252" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="849" topLeftY="262" iconType="iconpark/Office/box.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="658" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="676" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="686" topLeftY="354" iconType="iconpark/Base/setting-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="739" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="757" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="767" topLeftY="354" iconType="iconpark/Office/compression.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="77" height="18" topLeftX="821" topLeftY="392" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="center"> - <p textAlign="center"> - <span fontSize="12">描述信息</span> - </p> - </content> - </shape> - <shape width="40" height="40" topLeftX="839" topLeftY="344" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <icon width="20" height="20" topLeftX="849" topLeftY="354" iconType="iconpark/Office/copy-one.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left">行业地位</p> - </content> - </shape> - <shape width="434" height="42" topLeftX="42" topLeftY="91" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="199" height="254" topLeftX="42" topLeftY="179" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="54" topLeftX="61" topLeftY="252" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">80</span> - <span color="rgba(255, 255, 255, 1)" fontSize="24" fontFamily="Arial">%</span> - </p> - </content> - </shape> - <shape width="161" height="63" topLeftX="61" topLeftY="324" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <icon width="73" height="73" topLeftX="158" topLeftY="191" alpha="0.2" iconType="iconpark/Charts/chart-line.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="199" height="254" topLeftX="268" topLeftY="179" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="170" height="54" topLeftX="287" topLeftY="252" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">18.5</span> - <span color="rgba(255, 255, 255, 1)" fontSize="24" fontFamily="Arial">万方</span> - </p> - </content> - </shape> - <shape width="161" height="63" topLeftX="287" topLeftY="324" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <icon width="73" height="73" topLeftX="384" topLeftY="191" alpha="0.2" iconType="iconpark/Travel/international.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="199" height="254" topLeftX="493" topLeftY="179" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="161" height="54" topLeftX="512" topLeftY="252" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">1000</span> - <span color="rgba(255, 255, 255, 1)" fontSize="24" fontFamily="Arial">+</span> - </p> - </content> - </shape> - <shape width="161" height="63" topLeftX="512" topLeftY="324" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <icon width="73" height="73" topLeftX="609" topLeftY="191" alpha="0.2" iconType="iconpark/Base/more-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="199" height="254" topLeftX="719" topLeftY="179" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="123" height="54" topLeftX="738" topLeftY="252" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">3</span> - <span color="rgba(255, 255, 255, 1)" fontSize="24" fontFamily="Arial">名</span> - </p> - </content> - </shape> - <shape width="161" height="63" topLeftX="738" topLeftY="324" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <icon width="73" height="73" topLeftX="835" topLeftY="191" alpha="0.2" iconType="iconpark/Charts/chart-histogram-two.svg"> - <border color="rgba(255, 255, 255, 1)" width="4" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left">行业地位</p> - </content> - </shape> - <shape width="260" height="63" topLeftX="35" topLeftY="393" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <img src="VCNKb70k1oe0cnx188YcDSc0neg" width="177" height="317" topLeftX="737" topLeftY="139" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="0.27" rightOffset="0.27" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="OvArbORrPod2quxk3DncfEFMnEg" width="177" height="317" topLeftX="543" topLeftY="139" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="31" rightOffset="31" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <img src="OVKjbsCsFof2vdxs3V0csFisnaf" width="177" height="317" topLeftX="339" topLeftY="139" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="0.27" rightOffset="0.27" topOffset="0" bottomOffset="0" presetHandlers="8"/> - </img> - <shape width="260" height="10" topLeftX="35" topLeftY="220" presetHandlers="16" alpha="0.1" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="200" height="10" topLeftX="35" topLeftY="220" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - </shape> - <shape width="177" height="21" topLeftX="35" topLeftY="193" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>数据</p> - </content> - </shape> - <shape width="60" height="21" topLeftX="235" topLeftY="193" type="text"> - <content fontSize="14" fontFamily="Arial" color="rgba(222, 224, 227, 1)" textAlign="right"> - <p textAlign="right"> - <span fontFamily="Arial">77%</span> - </p> - </content> - </shape> - <shape width="260" height="10" topLeftX="35" topLeftY="287" presetHandlers="16" alpha="0.1" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="140" height="10" topLeftX="35" topLeftY="287" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - </shape> - <shape width="177" height="21" topLeftX="35" topLeftY="260" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>数据</p> - </content> - </shape> - <shape width="60" height="21" topLeftX="235" topLeftY="260" type="text"> - <content fontSize="14" fontFamily="Arial" color="rgba(222, 224, 227, 1)" textAlign="right"> - <p textAlign="right"> - <span fontFamily="Arial">55%</span> - </p> - </content> - </shape> - <shape width="260" height="10" topLeftX="35" topLeftY="355" presetHandlers="16" alpha="0.1" type="round-rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="220" height="10" topLeftX="35" topLeftY="355" presetHandlers="16" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - </shape> - <shape width="177" height="21" topLeftX="35" topLeftY="328" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>数据</p> - </content> - </shape> - <shape width="60" height="21" topLeftX="235" topLeftY="328" type="text"> - <content fontSize="14" fontFamily="Arial" color="rgba(222, 224, 227, 1)" textAlign="right"> - <p textAlign="right"> - <span fontFamily="Arial">88%</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p textAlign="left">最佳实践</p> - </content> - </shape> - <img src="XluEbobgOoQWwpxksqicuH8SnKb" width="287" height="179" topLeftX="331" topLeftY="287"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="72" height="18" topLeftX="455" topLeftY="303" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="427" topLeftY="301" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="60" height="60" topLeftX="331" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">最佳实践</span> - </p> - </content> - </shape> - <img src="YgCMbbIkio2VjFxGAjYcpNYInDc" width="277" height="77" topLeftX="37" topLeftY="286"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <img src="LAMDbYeWToVWy6xzO7hc87e3nLg" width="284" height="82" topLeftX="636" topLeftY="282"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="224" height="30" topLeftX="42" topLeftY="225" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">标题</span> - </strong> - </p> - </content> - </shape> - <shape width="224" height="21" topLeftX="42" topLeftY="261" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)">输入相关的描述信息描述标题</span> - </strong> - </p> - </content> - </shape> - <shape width="224" height="30" topLeftX="696" topLeftY="225" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="20">标题</span> - </strong> - </p> - </content> - </shape> - <shape width="224" height="21" topLeftX="696" topLeftY="261" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)">输入相关的描述信息描述标题</span> - </strong> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="437" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">最佳实践</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="543" topLeftY="195" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">最佳实践</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="386" topLeftY="114" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">最佳实践</span> - </p> - </content> - </shape> - <shape width="60" height="60" topLeftX="492" topLeftY="114" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <content fontSize="16" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" lineSpacing="multiple:1.2"> - <p lineSpacing="multiple:1.2"> - <span color="rgba(255, 255, 255, 1)">最佳实践</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XZAxbIhLsok8UFxXIsvcb8r7nad" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="100" height="34" topLeftX="480" topLeftY="351" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">查看详情</span> - </p> - </content> - </shape> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="IWHzb12C1oNer1xCqNmch9FunBc" width="328" height="368" topLeftX="83" topLeftY="87" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="34" bottomOffset="34" presetHandlers="8"/> - </img> - <shape width="431" height="42" topLeftX="480" topLeftY="270" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="431" height="40" topLeftX="480" topLeftY="202" type="text"> - <content textType="title" fontSize="40" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p>产品价格</p> - </content> - </shape> - <shape width="431" height="54" topLeftX="480" topLeftY="145" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p textAlign="left">PART 3</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>产品价格体系</p> - </content> - </shape> - <shape width="270" height="376" topLeftX="647" topLeftY="99" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="270" height="376" topLeftX="42" topLeftY="99" presetHandlers="8" type="round-rect"> - <border color="rgba(255, 255, 255, 0.2)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="270" height="376" topLeftX="345" topLeftY="99" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="238" height="21" topLeftX="362" topLeftY="123" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong>高级版价格</strong> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="395" topLeftY="210" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">描述信息描述信息描述信息</span> - </p> - </content> - </shape> - <shape width="238" height="36" topLeftX="362" topLeftY="151" type="text"> - <content fontSize="24" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">16,888</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="395" topLeftY="247" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="395" topLeftY="284" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <icon width="23" height="23" topLeftX="359" topLeftY="207" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="359" topLeftY="245" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="359" topLeftY="282" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="359" topLeftY="393" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 227, 227, 1)"/> - </fill> - <border color="rgba(216, 57, 49, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="359" topLeftY="430" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 227, 227, 1)"/> - </fill> - <border color="rgba(216, 57, 49, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="205" height="18" topLeftX="395" topLeftY="321" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">描述信息描述信息描述信息</span> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="395" topLeftY="358" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="395" topLeftY="395" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="395" topLeftY="433" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="554" topLeftY="121" alpha="0.1" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <shape width="32" height="32" topLeftX="561" topLeftY="129" alpha="0.2" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </shape> - <icon width="16" height="16" topLeftX="569" topLeftY="138" iconType="iconpark/Game/trophy.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="238" height="21" topLeftX="59" topLeftY="123" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong>基础价格</strong> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="92" topLeftY="210" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">描述信息描述信息描述信息</span> - </p> - </content> - </shape> - <shape width="238" height="36" topLeftX="59" topLeftY="151" type="text"> - <content fontSize="24" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" fontSize="24">12,888</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="92" topLeftY="247" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="92" topLeftY="284" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <icon width="23" height="23" topLeftX="57" topLeftY="319" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 227, 227, 1)"/> - </fill> - <border color="rgba(216, 57, 49, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="57" topLeftY="356" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 227, 227, 1)"/> - </fill> - <border color="rgba(216, 57, 49, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="57" topLeftY="207" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="57" topLeftY="245" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="57" topLeftY="282" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="57" topLeftY="393" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 227, 227, 1)"/> - </fill> - <border color="rgba(216, 57, 49, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="57" topLeftY="430" iconType="iconpark/Character/close-one.svg"> - <fill> - <fillColor color="rgba(255, 227, 227, 1)"/> - </fill> - <border color="rgba(216, 57, 49, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="205" height="18" topLeftX="92" topLeftY="321" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">描述信息描述信息描述信息</span> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="92" topLeftY="358" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="92" topLeftY="395" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="92" topLeftY="433" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="251" topLeftY="121" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(102, 51, 231, 1) 0%,rgba(145, 122, 215, 1) 100%)"/> - </fill> - </shape> - <shape width="32" height="32" topLeftX="258" topLeftY="129" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(102, 51, 231, 1) 0%,rgba(145, 122, 215, 1) 100%)"/> - </fill> - </shape> - <icon width="16" height="16" topLeftX="266" topLeftY="138" iconType="iconpark/Game/trophy.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="238" height="21" topLeftX="664" topLeftY="123" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong>专业版价格</strong> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="697" topLeftY="210" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">描述信息描述信息描述信息</span> - </p> - </content> - </shape> - <shape width="238" height="36" topLeftX="664" topLeftY="151" type="text"> - <content fontSize="24" fontFamily="思源黑体" color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" bold="true" textAlign="left"> - <p textAlign="left"> - <strong> - <span color="linear-gradient(135deg,rgba(193, 208, 250, 1) 0%,rgba(133, 167, 255, 1) 54%,rgba(166, 68, 255, 1) 100%)" fontSize="24">20,888</span> - </strong> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="697" topLeftY="247" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="697" topLeftY="284" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <icon width="23" height="23" topLeftX="663" topLeftY="207" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="663" topLeftY="245" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="663" topLeftY="282" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="205" height="18" topLeftX="697" topLeftY="321" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">描述信息描述信息描述信息</span> - </p> - </content> - </shape> - <shape width="205" height="18" topLeftX="697" topLeftY="358" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="697" topLeftY="395" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="205" height="18" topLeftX="697" topLeftY="433" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">描述信息描述信息描述信息</p> - </content> - </shape> - <shape width="46" height="46" topLeftX="856" topLeftY="121" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(102, 51, 231, 1) 0%,rgba(145, 122, 215, 1) 100%)"/> - </fill> - </shape> - <shape width="32" height="32" topLeftX="863" topLeftY="129" alpha="0.3" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(102, 51, 231, 1) 0%,rgba(145, 122, 215, 1) 100%)"/> - </fill> - </shape> - <icon width="16" height="16" topLeftX="871" topLeftY="138" iconType="iconpark/Game/trophy.svg"> - <border color="rgba(255, 255, 255, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="359" topLeftY="316" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="359" topLeftY="355" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="663" topLeftY="319" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="663" topLeftY="356" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="663" topLeftY="393" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="23" height="23" topLeftX="663" topLeftY="430" iconType="iconpark/Character/check-one.svg"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <border color="rgba(46, 161, 33, 1)" width="1" lineJoin="miter" miterLimit="10"/> - </icon> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>客户评价</p> - </content> - </shape> - <shape width="419" height="175" topLeftX="42" topLeftY="98" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(92, 135, 245, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="72" height="21" topLeftX="106" topLeftY="213" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">姓名</p> - </content> - </shape> - <shape width="72" height="18" topLeftX="106" topLeftY="232" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">Title</span> - </p> - </content> - </shape> - <img src="AxddbMhlFoFVBrxBsi9cQfx1nTd" width="32" height="32" topLeftX="66" topLeftY="216"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="216"/> - </img> - <shape width="72" height="18" topLeftX="378" topLeftY="223" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="349" topLeftY="221" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="32" height="54" topLeftX="50" topLeftY="105" alpha="0.25" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">“</span> - </p> - </content> - </shape> - <shape width="371" height="63" topLeftX="66" topLeftY="125" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价</p> - </content> - </shape> - <shape width="419" height="175" topLeftX="496" topLeftY="98" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="72" height="21" topLeftX="560" topLeftY="213" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">姓名</p> - </content> - </shape> - <shape width="72" height="18" topLeftX="560" topLeftY="232" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">Title</span> - </p> - </content> - </shape> - <img src="AxddbMhlFoFVBrxBsi9cQfx1nTd" width="32" height="32" topLeftX="520" topLeftY="216"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="216"/> - </img> - <shape width="72" height="18" topLeftX="832" topLeftY="223" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="803" topLeftY="221" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="32" height="54" topLeftX="504" topLeftY="105" alpha="0.25" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">“</span> - </p> - </content> - </shape> - <shape width="371" height="63" topLeftX="520" topLeftY="125" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价</p> - </content> - </shape> - <shape width="419" height="175" topLeftX="42" topLeftY="314" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="72" height="21" topLeftX="106" topLeftY="430" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">姓名</p> - </content> - </shape> - <shape width="72" height="18" topLeftX="106" topLeftY="449" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">Title</span> - </p> - </content> - </shape> - <img src="AxddbMhlFoFVBrxBsi9cQfx1nTd" width="32" height="32" topLeftX="66" topLeftY="433"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="216"/> - </img> - <shape width="72" height="18" topLeftX="378" topLeftY="440" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="349" topLeftY="438" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="32" height="54" topLeftX="50" topLeftY="322" alpha="0.25" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">“</span> - </p> - </content> - </shape> - <shape width="371" height="63" topLeftX="66" topLeftY="341" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价</p> - </content> - </shape> - <shape width="419" height="175" topLeftX="496" topLeftY="314" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="72" height="21" topLeftX="560" topLeftY="430" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left">姓名</p> - </content> - </shape> - <shape width="72" height="18" topLeftX="560" topLeftY="449" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">Title</span> - </p> - </content> - </shape> - <img src="AxddbMhlFoFVBrxBsi9cQfx1nTd" width="32" height="32" topLeftX="520" topLeftY="433"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0" presetHandlers="216"/> - </img> - <shape width="72" height="18" topLeftX="832" topLeftY="440" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="803" topLeftY="438" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="32" height="54" topLeftX="504" topLeftY="322" alpha="0.25" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="rgba(255, 255, 255, 1)" fontSize="54" fontFamily="Arial">“</span> - </p> - </content> - </shape> - <shape width="371" height="63" topLeftX="520" topLeftY="341" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价,输入相关的描述信息描述客户评价</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="XZAxbIhLsok8UFxXIsvcb8r7nad" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="100" height="34" topLeftX="480" topLeftY="351" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <content fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="14">查看详情</span> - </p> - </content> - </shape> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <img src="Ywdkb7xP8oZYI5xjy9lcnAaMn63" width="328" height="368" topLeftX="83" topLeftY="87" exposure="14" contrast="-5" saturation="11" temperature="-26"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="108" bottomOffset="108" presetHandlers="8"/> - </img> - <shape width="431" height="42" topLeftX="480" topLeftY="270" type="text"> - <content textType="title" fontSize="14" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="false"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="431" height="40" topLeftX="480" topLeftY="202" type="text"> - <content textType="title" fontSize="40" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p>未来展望</p> - </content> - </shape> - <shape width="431" height="54" topLeftX="480" topLeftY="145" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p textAlign="left">PART 4</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="EHSwbpJS0o0vOZxVKxTcc5yqnyd" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>产品布局</p> - </content> - </shape> - <img src="IqXXbL1bJoyXO2xZnLgcAQYSn7d" width="768" height="375" topLeftX="96" topLeftY="82"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="180" height="80" topLeftX="73" topLeftY="192" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="161" height="54" topLeftX="83" topLeftY="205" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span fontSize="12">输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</span> - </p> - </content> - </shape> - <shape width="180" height="80" topLeftX="253" topLeftY="394" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="161" height="54" topLeftX="263" topLeftY="407" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span fontSize="12">输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</span> - </p> - </content> - </shape> - <shape width="180" height="80" topLeftX="419" topLeftY="63" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="161" height="54" topLeftX="428" topLeftY="76" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span fontSize="12">输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</span> - </p> - </content> - </shape> - <shape width="180" height="80" topLeftX="630" topLeftY="304" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - <border color="rgba(255, 255, 255, 0.3)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="161" height="54" topLeftX="639" topLeftY="317" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p> - <span fontSize="12">输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</span> - </p> - </content> - </shape> - <shape width="179" height="155" topLeftX="35" topLeftY="348" presetHandlers="8" alpha="0.5" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 0.1) 0%,rgba(74, 60, 243, 0.1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - </shape> - <shape width="155" height="21" topLeftX="45" topLeftY="363" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true"> - <p> - <strong>说明</strong> - </p> - </content> - </shape> - <shape width="139" height="18" topLeftX="65" topLeftY="390" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">输入相关的描述信息</span> - </p> - </content> - </shape> - <shape width="10" height="10" topLeftX="46" topLeftY="394" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <shape width="139" height="18" topLeftX="65" topLeftY="415" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">输入相关的描述信息</span> - </p> - </content> - </shape> - <shape width="10" height="10" topLeftX="46" topLeftY="419" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <shape width="139" height="18" topLeftX="65" topLeftY="440" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">输入相关的描述信息</span> - </p> - </content> - </shape> - <shape width="10" height="10" topLeftX="46" topLeftY="444" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <shape width="139" height="18" topLeftX="65" topLeftY="465" type="text"> - <content fontSize="12" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" textAlign="left"> - <p textAlign="left"> - <span fontSize="12">输入相关的描述信息</span> - </p> - </content> - </shape> - <shape width="10" height="10" topLeftX="46" topLeftY="469" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="163" topLeftY="170" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(14, 198, 215, 1) 0%,rgba(0, 137, 181, 1) 63%,rgba(17, 198, 154, 1) 100%)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="516" topLeftY="149" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(231, 151, 30, 1) 0%,rgba(232, 81, 49, 1) 63%,rgba(240, 193, 123, 1) 100%)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="338" topLeftY="371" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - </shape> - <shape width="10" height="10" topLeftX="674" topLeftY="272" type="ellipse"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(55, 182, 207, 1) 0%,rgba(66, 62, 237, 1) 66%,rgba(56, 137, 234, 1) 100%)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="L76CbnVyxo5C2yxuas1csfaqn1c" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="GhNsbFJ2toyerNx34evcOKrDnkd" width="768" height="375" topLeftX="96" topLeftY="82" alpha="0.5"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="72" height="18" topLeftX="869" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="840" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="653" height="42" topLeftX="42" topLeftY="17" type="text"> - <content textType="sub-headline" fontSize="28" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true"> - <p>未来展望</p> - </content> - </shape> - <shape width="885" height="269" topLeftX="38" topLeftY="234" presetHandlers="8" type="round-rect"> - <fill> - <fillColor color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)"/> - </fill> - <border color="linear-gradient(135deg,rgba(116, 154, 253, 1) 0%,rgba(80, 86, 231, 1) 55%,rgba(153, 55, 242, 1) 100%)" width="1" lineJoin="miter" miterLimit="10"/> - <shadow/> - </shape> - <shape width="204" height="54" topLeftX="38" topLeftY="105" type="text"> - <content textType="title" fontSize="54" fontFamily="Arial" color="linear-gradient(135deg,rgba(0, 209, 240, 1) 0%,rgba(95, 173, 243, 1) 55%,rgba(147, 151, 244, 1) 100%)" bold="true" lineSpacing="multiple:1" textAlign="left"> - <p textAlign="left"> - <span color="linear-gradient(135deg,rgba(0, 209, 240, 1) 0%,rgba(95, 173, 243, 1) 55%,rgba(147, 151, 244, 1) 100%)" fontSize="54" fontFamily="Arial">19,810</span> - </p> - </content> - </shape> - <shape width="653" height="84" topLeftX="269" topLeftY="110" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)"> - <p>输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题,输入相关的描述信息描述上述标题</p> - </content> - </shape> - <shape width="200" height="30" topLeftX="42" topLeftY="169" type="text"> - <content fontSize="20" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true"> - <p> - <strong> - <span fontSize="20">数据描述</span> - </strong> - </p> - </content> - </shape> - <shape width="830" height="48" topLeftX="65" topLeftY="273" presetHandlers="8" alpha="0.3" type="round-rect"> - <fill> - <fillColor color="rgba(23, 29, 99, 1)"/> - </fill> - </shape> - <shape width="245" height="21" topLeftX="92" topLeftY="286" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong>标题</strong> - </p> - </content> - </shape> - <shape width="245" height="21" topLeftX="355" topLeftY="286" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong>标题</strong> - </p> - </content> - </shape> - <shape width="245" height="21" topLeftX="619" topLeftY="286" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="true" textAlign="center"> - <p textAlign="center"> - <strong>标题</strong> - </p> - </content> - </shape> - <shape width="245" height="21" topLeftX="92" topLeftY="336" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center"> - <span bold="false">描述信息</span> - </p> - </content> - </shape> - <shape width="245" height="21" topLeftX="355" topLeftY="336" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center">描述信息</p> - </content> - </shape> - <shape width="245" height="21" topLeftX="619" topLeftY="336" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center">描述信息</p> - </content> - </shape> - <shape width="245" height="21" topLeftX="92" topLeftY="388" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center"> - <span bold="false">描述信息</span> - </p> - </content> - </shape> - <shape width="245" height="21" topLeftX="355" topLeftY="388" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center">描述信息</p> - </content> - </shape> - <shape width="245" height="21" topLeftX="619" topLeftY="388" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center">描述信息</p> - </content> - </shape> - <shape width="245" height="21" topLeftX="92" topLeftY="440" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center"> - <span bold="false">描述信息</span> - </p> - </content> - </shape> - <shape width="245" height="21" topLeftX="355" topLeftY="440" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center">描述信息</p> - </content> - </shape> - <shape width="245" height="21" topLeftX="619" topLeftY="440" type="text"> - <content fontSize="14" fontFamily="思源黑体" color="rgba(222, 224, 227, 1)" bold="false" textAlign="center"> - <p textAlign="center">描述信息</p> - </content> - </shape> - <shape width="830" height="48" topLeftX="65" topLeftY="374" presetHandlers="8" alpha="0.1" type="round-rect"> - <fill> - <fillColor color="rgba(23, 29, 99, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillImg src="KYXNb7bSmoFNDvxOgNvcycZJnBf" alpha="1" rotateWithShape="false"/> - </fill> - </style> - <data> - <img src="FyQzbLdIRokiRZxiHdVcsbCcnog" width="1088" height="369" topLeftX="-59" topLeftY="85" rotation="180" alpha="0.8"> - <crop leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="0"/> - </img> - <shape width="72" height="18" topLeftX="64" topLeftY="26" type="text"> - <content fontSize="18" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Arial">LOGO</span> - </strong> - </p> - </content> - </shape> - <icon width="23" height="23" topLeftX="36" topLeftY="24" iconType="iconpark/Abstract/api-app.svg"> - <border color="rgba(255, 255, 255, 1)" width="2" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="842" height="42" topLeftX="64" topLeftY="270" type="text"> - <content textType="title" fontSize="28" fontFamily="Arial" color="rgba(255, 255, 255, 1)" bold="true" italic="true" textAlign="center"> - <p textAlign="center">The Future is Here. Thank you for Watching</p> - </content> - </shape> - <shape width="842" height="90" topLeftX="64" topLeftY="177" type="text"> - <content textType="title" fontSize="60" fontFamily="思源黑体" color="rgba(255, 255, 255, 1)" bold="true" textAlign="center"> - <p textAlign="center">未来已至 感谢观看</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/product--product_promotion.xml b/skills/lark-slides/assets/templates/product--product_promotion.xml deleted file mode 100644 index 4f82d9cf9..000000000 --- a/skills/lark-slides/assets/templates/product--product_promotion.xml +++ /dev/null @@ -1,687 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>产品推广方案-裂图重新上传 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF" fontSize="14"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style/> - <data> - <img src="KQ11bto5XoGHbCxBHmMchsYOn9e" width="251" height="425" topLeftX="578" topLeftY="65"> - <crop type="rect" leftOffset="6" rightOffset="169" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="39" height="425" topLeftX="578" topLeftY="65" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="536" height="180" topLeftX="84" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span fontSize="80">DIGITAL</span> - </p> - <p lineSpacing="multiple:1"> - <span fontSize="80">MARKETING</span> - </p> - </content> - </shape> - <shape width="325" height="68" topLeftX="84" topLeftY="257" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>产品推广计划</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="250" height="77" topLeftX="56" topLeftY="85" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>CONTENTS</p> - </content> - </shape> - <shape width="250" height="68" topLeftX="56" topLeftY="142" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <span bold="false">目录</span> - </p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="102" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">01</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="113" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">关于我们</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="114" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="189" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">02</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="200" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">愿景&目标</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="201" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="275" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">03</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="287" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">品牌策略</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="288" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="372" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">04</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="384" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3">核心产品</p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="385" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">01</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">关于我们</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <img src="KFOtbv5TUoKxm8x9dDfcfb6snEd" width="202" height="128" topLeftX="257" topLeftY="75" exposure="5" contrast="-12" saturation="-24" temperature="-65"> - <crop type="rect" leftOffset="126" rightOffset="29" topOffset="212" bottomOffset="18" presetHandlers="0"/> - </img> - <img src="KFOtbv5TUoKxm8x9dDfcfb6snEd" width="202" height="128" topLeftX="38" topLeftY="75" flipY="true" exposure="5" contrast="-12" saturation="-24" temperature="-73"> - <crop type="rect" leftOffset="0" rightOffset="202" topOffset="101" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="250" height="140" topLeftX="28" topLeftY="323" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" bold="true"> - <p> - <span fontSize="80">Hello</span> - </p> - </content> - </shape> - <shape width="250" height="68" topLeftX="32" topLeftY="293" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <span bold="false">你好</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="34" topLeftY="215" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="395" height="74" topLeftX="507" topLeftY="99" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="395" height="230" topLeftX="507" topLeftY="229" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="TE9RblFGdowyVexgIYIc2GEonJd" width="395" height="230" topLeftX="507" topLeftY="229" saturation="-43" temperature="-100"> - <crop type="rect" leftOffset="20" rightOffset="17" topOffset="88" bottomOffset="113" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="372" height="116" topLeftX="28" topLeftY="130" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true"> - <p>About us</p> - </content> - </shape> - <shape width="250" height="56" topLeftX="32" topLeftY="103" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">关于我们</span> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="32" topLeftY="235" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <img src="TDYmbbCrPoAAz0xgXVwcbblrn4f" width="395" height="415" topLeftX="507" topLeftY="44" saturation="-100" temperature="-100"> - <crop type="rect" leftOffset="26" rightOffset="68" topOffset="30" bottomOffset="45" presetHandlers="0"/> - </img> - <shape width="39" height="415" topLeftX="863" topLeftY="44" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">02</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)">愿景&目标</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="460" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="250" height="92" topLeftX="65" topLeftY="100" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true"> - <p> - <span fontSize="48">Vision</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="65" topLeftY="168" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="318" height="92" topLeftX="482" topLeftY="100" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true"> - <p> - <span fontSize="48">Mission</span> - </p> - </content> - </shape> - <shape width="250" height="56" topLeftX="65" topLeftY="72" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">愿景</span> - </p> - </content> - </shape> - <shape width="250" height="56" topLeftX="482" topLeftY="72" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">目标</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="482" topLeftY="168" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="395" height="189" topLeftX="74" topLeftY="240" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="EnkQbyTJKouv4bx15ezccGjinXc" width="395" height="189" topLeftX="74" topLeftY="240"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="206" presetHandlers="0"/> - </img> - <img src="ProZbJDy5omwBlxreCgcPqA9nOc" width="395" height="189" topLeftX="491" topLeftY="240" exposure="5" contrast="-23" saturation="-30" temperature="-42"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="118" bottomOffset="88" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">03</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)">品牌策略</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="372" height="116" topLeftX="28" topLeftY="130" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true"> - <p>Strategy</p> - </content> - </shape> - <shape width="250" height="56" topLeftX="32" topLeftY="103" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">推广策略</span> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="32" topLeftY="245" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">04</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)" bold="false">核心项目</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="196" height="50" topLeftX="95" topLeftY="77" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">Project 01 - XXX</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="49" topLeftX="81" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="81" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="98" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="231" height="49" topLeftX="365" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="365" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="382" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="231" height="49" topLeftX="648" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="648" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="666" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="66" height="66" topLeftX="163" topLeftY="221" iconType="iconpark/Base/bookmark.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="66" height="66" topLeftX="447" topLeftY="221" iconType="iconpark/Base/camera.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="66" height="66" topLeftX="731" topLeftY="221" iconType="iconpark/Office/list-view.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="554" height="56" topLeftX="291" topLeftY="77" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="318" height="74" topLeftX="32" topLeftY="271" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="202" height="465" topLeftX="379" topLeftY="37" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="196" height="50" topLeftX="32" topLeftY="221" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">Project 02 - XXX</span> - </strong> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="610" topLeftY="93" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="202" height="226" topLeftX="610" topLeftY="276" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="GGuFbd8azoDXASxtmdRcCjG0nrf" width="202" height="465" topLeftX="379" topLeftY="37" saturation="-73" temperature="-57"> - <crop type="rect" leftOffset="132" rightOffset="132" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="LYMEbK4ZroZq9pxhlNfcdHignHe" width="201" height="226" topLeftX="610" topLeftY="276" exposure="-4" contrast="-19" saturation="-23" temperature="-32"> - <crop type="rect" leftOffset="200" rightOffset="0" topOffset="64" bottomOffset="111" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="KQ11bto5XoGHbCxBHmMchsYOn9e" width="251" height="425" topLeftX="578" topLeftY="65"> - <crop type="rect" leftOffset="6" rightOffset="169" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="39" height="425" topLeftX="578" topLeftY="65" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="536" height="180" topLeftX="84" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span fontSize="80">THANK</span> - </p> - <p lineSpacing="multiple:1"> - <span fontSize="80">YOU</span> - </p> - </content> - </shape> - <shape width="325" height="68" topLeftX="84" topLeftY="257" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>感谢观看</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/assets/templates/product--product_promotion_2.xml b/skills/lark-slides/assets/templates/product--product_promotion_2.xml deleted file mode 100644 index 4f82d9cf9..000000000 --- a/skills/lark-slides/assets/templates/product--product_promotion_2.xml +++ /dev/null @@ -1,687 +0,0 @@ -<presentation xmlns="http://www.larkoffice.com/sml/2.0" width="960" height="540"> - <title>产品推广方案-裂图重新上传 - - - - <headline fontColor="#000000FF"/> - <sub-headline fontColor="#000000FF"/> - <body fontColor="#000000FF" fontSize="14"/> - <caption fontColor="#808080FF" fontSize="14"/> - </textStyles> - </theme> - <slide> - <style/> - <data> - <img src="KQ11bto5XoGHbCxBHmMchsYOn9e" width="251" height="425" topLeftX="578" topLeftY="65"> - <crop type="rect" leftOffset="6" rightOffset="169" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="39" height="425" topLeftX="578" topLeftY="65" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="536" height="180" topLeftX="84" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span fontSize="80">DIGITAL</span> - </p> - <p lineSpacing="multiple:1"> - <span fontSize="80">MARKETING</span> - </p> - </content> - </shape> - <shape width="325" height="68" topLeftX="84" topLeftY="257" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>产品推广计划</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="250" height="77" topLeftX="56" topLeftY="85" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="38" bold="true"> - <p>CONTENTS</p> - </content> - </shape> - <shape width="250" height="68" topLeftX="56" topLeftY="142" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <span bold="false">目录</span> - </p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="102" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">01</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="113" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">关于我们</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="114" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="189" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">02</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="200" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">愿景&目标</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="201" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="275" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">03</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="287" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(0, 0, 0, 1)" fontSize="18">品牌策略</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="288" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - <shape width="66" height="66" topLeftX="390" topLeftY="372" type="ellipse"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" fontFamily="Noto Sans" color="rgba(255, 255, 255, 1)" bold="true"> - <p> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="18" fontFamily="Noto Sans">04</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="43" topLeftX="463" topLeftY="384" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(0, 0, 0, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3">核心产品</p> - </content> - </shape> - <shape width="330" height="41" topLeftX="581" topLeftY="385" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="14" textAlign="left"> - <p>输入相关的描述信息以解释你的标题。</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">01</span> - </strong> - </p> - </content> - </shape> - <shape width="118" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <strong> - <span color="rgba(255, 255, 255, 1)" fontSize="24">关于我们</span> - </strong> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <img src="KFOtbv5TUoKxm8x9dDfcfb6snEd" width="202" height="128" topLeftX="257" topLeftY="75" exposure="5" contrast="-12" saturation="-24" temperature="-65"> - <crop type="rect" leftOffset="126" rightOffset="29" topOffset="212" bottomOffset="18" presetHandlers="0"/> - </img> - <img src="KFOtbv5TUoKxm8x9dDfcfb6snEd" width="202" height="128" topLeftX="38" topLeftY="75" flipY="true" exposure="5" contrast="-12" saturation="-24" temperature="-73"> - <crop type="rect" leftOffset="0" rightOffset="202" topOffset="101" bottomOffset="175" presetHandlers="0"/> - </img> - <shape width="250" height="140" topLeftX="28" topLeftY="323" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" bold="true"> - <p> - <span fontSize="80">Hello</span> - </p> - </content> - </shape> - <shape width="250" height="68" topLeftX="32" topLeftY="293" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="false" textAlign="left"> - <p> - <span bold="false">你好</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="34" topLeftY="215" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="395" height="74" topLeftX="507" topLeftY="99" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="395" height="230" topLeftX="507" topLeftY="229" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="TE9RblFGdowyVexgIYIc2GEonJd" width="395" height="230" topLeftX="507" topLeftY="229" saturation="-43" temperature="-100"> - <crop type="rect" leftOffset="20" rightOffset="17" topOffset="88" bottomOffset="113" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="372" height="116" topLeftX="28" topLeftY="130" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true"> - <p>About us</p> - </content> - </shape> - <shape width="250" height="56" topLeftX="32" topLeftY="103" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">关于我们</span> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="32" topLeftY="235" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <img src="TDYmbbCrPoAAz0xgXVwcbblrn4f" width="395" height="415" topLeftX="507" topLeftY="44" saturation="-100" temperature="-100"> - <crop type="rect" leftOffset="26" rightOffset="68" topOffset="30" bottomOffset="45" presetHandlers="0"/> - </img> - <shape width="39" height="415" topLeftX="863" topLeftY="44" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">02</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)">愿景&目标</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="460" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="250" height="92" topLeftX="65" topLeftY="100" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true"> - <p> - <span fontSize="48">Vision</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="65" topLeftY="168" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="318" height="92" topLeftX="482" topLeftY="100" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="48" bold="true"> - <p> - <span fontSize="48">Mission</span> - </p> - </content> - </shape> - <shape width="250" height="56" topLeftX="65" topLeftY="72" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">愿景</span> - </p> - </content> - </shape> - <shape width="250" height="56" topLeftX="482" topLeftY="72" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">目标</span> - </p> - </content> - </shape> - <shape width="318" height="56" topLeftX="482" topLeftY="168" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容</span> - </p> - </content> - </shape> - <shape width="395" height="189" topLeftX="74" topLeftY="240" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="EnkQbyTJKouv4bx15ezccGjinXc" width="395" height="189" topLeftX="74" topLeftY="240"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="0" bottomOffset="206" presetHandlers="0"/> - </img> - <img src="ProZbJDy5omwBlxreCgcPqA9nOc" width="395" height="189" topLeftX="491" topLeftY="240" exposure="5" contrast="-23" saturation="-30" temperature="-42"> - <crop type="rect" leftOffset="0" rightOffset="0" topOffset="118" bottomOffset="88" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">03</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="true" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)">品牌策略</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="372" height="116" topLeftX="28" topLeftY="130" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="64" bold="true"> - <p>Strategy</p> - </content> - </shape> - <shape width="250" height="56" topLeftX="32" topLeftY="103" alpha="0.7" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" bold="false" textAlign="left"> - <p> - <span fontSize="24" bold="false">推广策略</span> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="32" topLeftY="245" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <undefined type="fallback"/> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </style> - <data> - <shape width="118" height="118" topLeftX="182" topLeftY="193" type="ellipse"> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="36" fontFamily="Noto Sans" color="rgba(43, 47, 54, 1)" bold="true"> - <p> - <strong> - <span color="rgba(43, 47, 54, 1)" fontSize="36" fontFamily="Noto Sans">04</span> - </strong> - </p> - </content> - </shape> - <shape width="141" height="51" topLeftX="316" topLeftY="227" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="24" color="rgba(255, 255, 255, 1)" bold="false" lineSpacing="multiple:1.3" textAlign="left"> - <p lineSpacing="multiple:1.3"> - <span color="rgba(255, 255, 255, 1)" bold="false">核心项目</span> - </p> - </content> - </shape> - <shape width="330" height="47" topLeftX="450" topLeftY="229" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" color="rgba(255, 255, 255, 1)" bold="false" textAlign="left"> - <p> - <span color="rgba(255, 255, 255, 1)" fontSize="18" bold="false">输入相关的描述信息以解释你的标题。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="196" height="50" topLeftX="95" topLeftY="77" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">Project 01 - XXX</span> - </strong> - </p> - </content> - </shape> - <shape width="231" height="49" topLeftX="81" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="81" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #1</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="98" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="231" height="49" topLeftX="365" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="365" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #2</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="382" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="231" height="49" topLeftX="648" topLeftY="393" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" color="rgba(43, 47, 54, 0.502)" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2">描述相关的信息以解释你的标题。现在就开始打字吧。</p> - </content> - </shape> - <shape width="231" height="42" topLeftX="648" topLeftY="348" type="text"> - <content textType="headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="18" bold="true" lineSpacing="multiple:1.2" textAlign="center"> - <p lineSpacing="multiple:1.2"> - <strong> - <span fontSize="18">关键点 #3</span> - </strong> - </p> - </content> - </shape> - <shape width="196" height="164" topLeftX="666" topLeftY="172" presetHandlers="0" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <icon width="66" height="66" topLeftX="163" topLeftY="221" iconType="iconpark/Base/bookmark.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="66" height="66" topLeftX="447" topLeftY="221" iconType="iconpark/Base/camera.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <icon width="66" height="66" topLeftX="731" topLeftY="221" iconType="iconpark/Office/list-view.svg"> - <border color="rgba(255, 255, 255, 1)" width="3" lineJoin="miter" miterLimit="10"/> - </icon> - <shape width="554" height="56" topLeftX="291" topLeftY="77" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style> - <fill> - <fillColor color="rgba(255, 255, 255, 1)"/> - </fill> - </style> - <data> - <shape width="318" height="74" topLeftX="32" topLeftY="271" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="202" height="465" topLeftX="379" topLeftY="37" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <shape width="196" height="50" topLeftX="32" topLeftY="221" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="20" bold="true"> - <p> - <strong> - <span fontSize="20">Project 02 - XXX</span> - </strong> - </p> - </content> - </shape> - <shape width="318" height="74" topLeftX="610" topLeftY="93" alpha="0.7" type="text"> - <content paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="12" textAlign="left"> - <p> - <span fontSize="12">描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。描述相关的信息以解释你的标题。现在就开始打字吧。写任何你想表达的内容。</span> - </p> - </content> - </shape> - <shape width="202" height="226" topLeftX="610" topLeftY="276" type="rect"> - <fill> - <fillColor/> - </fill> - </shape> - <img src="GGuFbd8azoDXASxtmdRcCjG0nrf" width="202" height="465" topLeftX="379" topLeftY="37" saturation="-73" temperature="-57"> - <crop type="rect" leftOffset="132" rightOffset="132" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <img src="LYMEbK4ZroZq9pxhlNfcdHignHe" width="201" height="226" topLeftX="610" topLeftY="276" exposure="-4" contrast="-19" saturation="-23" temperature="-32"> - <crop type="rect" leftOffset="200" rightOffset="0" topOffset="64" bottomOffset="111" presetHandlers="0"/> - </img> - </data> - <note> - <content/> - </note> - </slide> - <slide> - <style/> - <data> - <img src="KQ11bto5XoGHbCxBHmMchsYOn9e" width="251" height="425" topLeftX="578" topLeftY="65"> - <crop type="rect" leftOffset="6" rightOffset="169" topOffset="0" bottomOffset="0" presetHandlers="0"/> - </img> - <shape width="39" height="425" topLeftX="578" topLeftY="65" type="rect"> - <fill> - <fillColor color="rgba(43, 47, 54, 1)"/> - </fill> - </shape> - <shape width="536" height="180" topLeftX="84" topLeftY="85" type="text"> - <content textType="title" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="80" color="rgba(43, 47, 54, 1)" bold="true" lineSpacing="multiple:1"> - <p lineSpacing="multiple:1"> - <span fontSize="80">THANK</span> - </p> - <p lineSpacing="multiple:1"> - <span fontSize="80">YOU</span> - </p> - </content> - </shape> - <shape width="325" height="68" topLeftX="84" topLeftY="257" type="text"> - <content textType="sub-headline" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" fontSize="32" fontFamily="undefined" color="rgba(43, 47, 54, 1)" bold="true" textAlign="left"> - <p>感谢观看</p> - </content> - </shape> - </data> - <note> - <content/> - </note> - </slide> -</presentation> \ No newline at end of file diff --git a/skills/lark-slides/references/planning-layer.md b/skills/lark-slides/references/planning-layer.md index 51731fa03..e83266d53 100644 --- a/skills/lark-slides/references/planning-layer.md +++ b/skills/lark-slides/references/planning-layer.md @@ -7,15 +7,12 @@ ## Required Flow 1. 理解用户需求,必要时澄清主题、受众、页数、风格。 -2. 如果适合模板,先用 `template_tool.py search` 检索,锁定模板后用 `summarize` 获取主题和页型信息。 -3. 选择唯一 plan 目录:`.lark-slides/plan/<deck-or-task-id>/`。 -4. 先创建目录:`mkdir -p .lark-slides/plan/<deck-or-task-id>`。 -5. 写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`。 -6. 读取 `xml-schema-quick-ref.md`、`visual-planning.md` 和 `asset-planning.md`。 -7. 按 plan、visual planning 和 asset planning 规则逐页生成 XML,把 `layout_type`、`visual_focus`、`text_density` 转成具体页面几何和文本量约束,并把缺失素材转成可执行兜底视觉。 -8. 创建 PPT 后用 `xml_presentations.get` 回读,核对页面数量、关键元素和 plan 到 XML 的对应关系。 - -模板不能代替 plan。模板搜索和摘要只能影响 `theme_style`、页面流、布局选择和局部布局骨架;最终仍必须有 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`。 +2. 选择唯一 plan 目录:`.lark-slides/plan/<deck-or-task-id>/`。 +3. 先创建目录:`mkdir -p .lark-slides/plan/<deck-or-task-id>`。 +4. 写入 `.lark-slides/plan/<deck-or-task-id>/slide_plan.json`。 +5. 读取 `xml-schema-quick-ref.md`、`visual-planning.md` 和 `asset-planning.md`。 +6. 按 plan、visual planning 和 asset planning 规则逐页生成 XML,把 `layout_type`、`visual_focus`、`text_density` 转成具体页面几何和文本量约束,并把缺失素材转成可执行兜底视觉。 +7. 创建 PPT 后用 `xml_presentations.get` 回读,核对页面数量、关键元素和 plan 到 XML 的对应关系。 ## Plan Path diff --git a/skills/lark-slides/references/template-catalog.md b/skills/lark-slides/references/template-catalog.md deleted file mode 100644 index e5ce6bc14..000000000 --- a/skills/lark-slides/references/template-catalog.md +++ /dev/null @@ -1,463 +0,0 @@ -# Slides 模板目录 - -> **创建 PPT 前必读。** 先根据用户需求匹配 1-2 个最佳模板,再根据每个模板下方的“页型索引”确定需要的页面类型。模板 XML 位于 `assets/templates/*.xml`,属于机器资源;默认通过脚本摘要或裁切,**不要阅读全文模板 XML**,尤其不要默认读取 `light_general.xml` / `dark_general.xml` 这类 54/56 页通用变体库全文。 - -> **机器优先路径。** 优先运行 [`../scripts/template_tool.py`](../scripts/template_tool.py) 的 `search` 做低成本路由;锁定模板后运行 `summarize` 获取主题和布局摘要;只有需要具体布局骨架时才运行 `extract` 裁切目标页型 XML。`template-index.json` 是脚本缓存/轻量路由索引,不是默认阅读入口。 - -> **降级路径。** 如果 `template_tool.py` 不可用,使用本文按场景确定候选模板和页型,但不要因为脚本不可用就直接阅读全文模板 XML。 - -> **对话输出规则。** 当处于需求澄清阶段时,应该把匹配结果整理成 **2-3 个用户可选模板候选**,不要默认把整份目录贴给用户。每个候选至少包含:模板名、适用场景、风格/色调、简短推荐理由。优先展示场景强相关模板;`light_general.xml` / `dark_general.xml` 这类通用模板只作为兜底或补充选项。 - -## 使用方法 - -1. 先运行 `python3 skills/lark-slides/scripts/template_tool.py search --query "<主题>" --limit 3`,根据用户描述的 **场景、风格、色调** 做初筛 -2. 整理出 **2-3 个**最匹配的用户可选模板候选;优先选场景强相关模板,没有明显场景模板时再用标 ⭐ 的通用模板兜底 -3. 用户选定后,再锁定 **1-2 个**最匹配的模板作为实际参考 -4. 先看模板下方的 **页型索引**,锁定你真正需要的页型:封面 / 目录 / 分节 / 内容 / 结尾 -5. 优先运行 `template_tool.py summarize` 查看 `<theme>` / 页型摘要;只有需要具体布局骨架时,再运行 `template_tool.py extract` -6. 从模板中提取并复用:`<theme>` 配色、页面流、shape 排列布局、装饰元素风格 -7. 将用户的实际内容填充到模板的结构框架中,**不要照搬模板的占位文字** - -### 脚本快捷命令 - -```bash -# 先找候选模板 -python3 skills/lark-slides/scripts/template_tool.py search --query "工作汇报" --tone light --limit 3 - -# 看指定页型的紧凑摘要 -python3 skills/lark-slides/scripts/template_tool.py summarize --template office--work_report --label 内容 - -# 只裁切目标页型,避免把整份 XML 拉进上下文 -python3 skills/lark-slides/scripts/template_tool.py extract --template office--work_report --label 封面 --out /tmp/work-report-cover.xml -``` - -如果脚本路径不可用,按这个顺序手动降级: - -1. 回到本文对应分类,确认页数、色调、适用场景,选 2-3 个候选 -2. 根据“页型索引”确定需要的目标页型 -3. 等脚本可用后再用 `summarize` / `extract` 获取详细布局数据;不要整份展开 `assets/templates/*.xml` - -## 匹配维度 - -| 维度 | 说明 | -|------|------| -| 场景 | 用户要做什么?(工作汇报、产品介绍、商业计划书、培训...) | -| 色调 | light(浅色/白底)、dark(深色/黑底)、colorful(多彩活泼) | -| 正式度 | formal(正式商务)、casual(轻松分享)、creative(创意设计) | - ---- - -## office — 办公通用 - -### ⭐ light_general.xml — 浅色通用变体库 - -- **54 页 slide 变体**(非完整 PPT,是按需挑选的页面类型库) -- 色调:light | 正式度:formal -- 配色:白底 `#f4f5f6`,蓝色点缀 `#4e6efd`,深灰文字 `#1f2329` -- 页面类型:封面×2, 目录×4, 分节页, 内容×30, 数据卡片×2, 结尾 -- 页型索引(建议先读):封面 `1-2` | 目录 `3-6` | 分节/过渡 `7-8` | 内容/图文/时间线/数据 `9-53` | 结尾 `54` -- **适用**:任何需要浅色风格的场景,从中挑选合适的页面布局 - -### ⭐ dark_general.xml — 深色通用变体库 - -- **56 页 slide 变体**(同上,深色版) -- 色调:dark | 正式度:formal -- 配色:深灰底 `#1f2329`,蓝色点缀 `#4e6efd`,白色文字 -- 页面类型:封面×2, 目录×4, 分节页, 内容×31, 数据卡片×2, 结尾 -- 页型索引(建议先读):封面 `1-2` | 目录 `3-6` | 分节/过渡 `7-8` | 内容/图文/时间线/数据 `9-54` | 结尾 `55-56` -- **适用**:任何需要深色风格的场景,渐变填充(蓝-青)、透明度叠加 - -### work_report.xml — 工作汇报 - -- 13 页 | 色调:light | 正式度:formal -- 配色:图片底图 + 半透明白色卡片(alpha=0.51),紫色 `#7f3bf5`/蓝色 `#3370ff` 点缀 -- 结构:封面 → 目录(4 Part) → 数据页 → 内容×9 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `4-12` | 结尾 `13` -- **适用**:工作汇报、月报、项目进展。中英双语标题,4 宫格布局,圆角卡片 - -### work_summary_report.xml — 工作总结报告 - -- 16 页 | 色调:dark | 正式度:formal -- 配色:深灰底 `#2b2f36`,深蓝 `#3a6cea`/靛蓝 `#0e5efd` 点缀 -- 结构:封面 → 目录 → [分节页 → 内容]×4 → 结尾(4 个清晰分节) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 6, 9, 12` | 内容 `4-5, 7-8, 10-11, 13-15` | 结尾 `16` -- **适用**:年度/季度工作总结,分节清晰的正式汇报 - -### work_summary.xml — 工作总结 - -- 20 页 | 色调:light | 正式度:formal -- 配色:暖黄 `#fff6dc` + 浅蓝 `#ddeff7` 交替,天蓝 `#1393cf` 点缀,金色 `#f7c15f` 强调 -- 结构:封面 → 目录 → 内容×7 → 数据×2 → 内容×8 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-9, 12-19` | 结尾 `20` -- **适用**:轻松温暖风格的工作总结。shape 类型最丰富(饼图、三角、弧形等) - -### quarterly_review.xml — 季度复盘 - -- 17 页 | 色调:dark | 正式度:formal -- 配色:海军蓝图片底图,钢蓝 `#435671` 文字,半透明白色叠加(alpha=0.6) -- 结构:封面 → 目录 → 内容×2 → 数据×2 → 内容×10 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-4, 7-16` | 结尾 `17` -- **适用**:季度复盘、OKR 回顾,数据驱动型汇报 - -### dept_annual_report.xml — 部门年度汇报 - -- 17 页 | 色调:dark | 正式度:formal -- 配色:黑色底图 + 极光渐变(紫/青/蓝),青色 `#64e8d6` → 蓝色 `#73bbff` 渐变点缀 -- 结构:封面 → 目录 → 内容×4 → 数据 → 内容×9 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-6, 8-16` | 结尾 `17` -- **适用**:年度部门汇报,视觉冲击力强,多彩渐变风 - -### project_kickoff.xml — 项目启动宣讲 - -- 18 页 | 色调:dark | 正式度:formal -- 配色:蓝色渐变底 `linear-gradient(#4b5cf5, #233afb)`,紫色 `#ad82f7` 强调 -- 结构:封面 → 目录 → 内容×15 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-17` | 结尾 `18` -- **适用**:项目启动、产品发布、技术宣讲。大胆蓝紫渐变,卡片式布局 - ---- - -## product — 产品 - -### product_analysis.xml — 产品分析报告 - -- 17 页 | 色调:light | 正式度:formal -- 配色:柔蓝渐变底图 `#deebff → #ffffff`,蓝色 `#2e4ef6 → #2182f4` 点缀,浅蓝卡片 `#e2eaf9` -- 结构:封面 → 目录 → 内容 → 数据 → 内容×4 → 数据 → 内容×5 → SWOT → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3, 5-8, 10-16` | 结尾 `17` -- **适用**:产品分析、竞品分析。包含 SWOT 分析页,数据图表页 - -### product_intro.xml — 产品介绍 - -- 18 页 | 色调:colorful | 正式度:formal -- 配色:多彩渐变(每个分节不同色系:青蓝、橙红、紫、蓝靛) -- 结构:封面 → 目录 → [分节页 → 内容]×4 → 结尾(含对比页、时间线页) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 7, 11, 15` | 内容 `4-6, 8-10, 12-14, 16-17` | 结尾 `18` -- **适用**:产品发布、产品介绍。视觉最丰富,每节独立配色 - -### market_analysis.xml — 市场分析报告 - -- 11 页 | 色调:dark | 正式度:formal -- 配色:黑底,蓝紫渐变 `#0d47db → #7d00fa` 点缀 -- 结构:封面 → 目录 → 分节 → 数据 → 内容×2 → 分节 → 内容×3 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 7` | 内容 `5-6, 8-10` | 结尾 `11` -- **适用**:市场分析、行业报告。精简紧凑(11 页),蓝紫科技感 - -### business_case_analysis.xml — 商业案例分析 - -- 18 页 | 色调:dark | 正式度:formal -- 配色:深灰图片底图,金属银渐变 `#9c9c9e → #c0c5d3` 点缀 -- 结构:封面 → 内容 → [分节页 → 内容]×4 → 结尾(4 个清晰分节) -- 页型索引(建议先读):封面 `1` | 目录 `无` | 分节 `3, 7, 11, 15` | 内容 `2, 4-6, 8-10, 12-14, 16-17` | 结尾 `18` -- **适用**:商业案例、行业案例拆解。金属质感,分节明确 - -### product_promotion.xml — 产品推广方案 - -- 13 页 | 色调:dark | 正式度:formal -- 配色:深灰 `#2b2f36` + 白色交替,极简黑白 -- 结构:封面 → 目录 → 内容×6 → 分节 → 内容×3 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `9` | 内容 `3-8, 10-12` | 结尾 `13` -- **适用**:推广方案、营销策略。极简风,黑白对比 - -### product_promotion_2.xml — 产品推广方案二 - -- 13 页 | 色调:light | 正式度:formal -- 配色:白底,深灰 `#2b2f36` 强调,图片裁切与几何色块组合 -- 结构:封面 → 目录 → 内容×6 → 分节 → 内容×3 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `9` | 内容 `3-8, 10-12` | 结尾 `13` -- **适用**:产品推广、数字营销方案。比 `product_promotion.xml` 更偏浅色商务和图文展示 - ---- - -## marketing — 市场营销 - -### business_plan.xml — 商业计划书 - -- 18 页 | 色调:light | 正式度:formal -- 配色:白底,蓝青渐变封面 `#0b3be5 → #25d8ff`,鲜蓝 `#194cff` 点缀,含甜甜圈图表 -- 结构:封面 → 目录 → 内容×12 → 时间线 → 内容×2 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-14, 16-17` | 结尾 `18` -- **适用**:商业计划书、创业路演。含时间线页、图表页 - -### roadshow_business_plan.xml — 企业路演商业计划书 - -- 20 页 | 色调:light | 正式度:formal -- 配色:白底,绿色 `#20b14e` 点缀(增长/商业感) -- 结构:封面 → 目录 → [分节页 → 内容]×5 → 结尾(含时间线、流程图) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 6, 9, 12, 15` | 内容 `4-5, 7-8, 10-11, 13-14, 16-19` | 结尾 `20` -- **适用**:融资路演、企业路演。绿色增长主题,含 chevron 流程图形 - -### brand_communication.xml — 品牌传播方案 - -- 17 页 | 色调:dark | 正式度:formal -- 配色:黑色图片底图,青绿渐变 `#59c2ff → #a1ffc8` 点缀,半透明白色卡片 -- 结构:封面 → 目录 → 内容×8 → 数据 → 内容×5 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-10, 12-16` | 结尾 `17` -- **适用**:品牌传播、公关方案。青绿科技感 + 暗色背景 - -### marketing_strategy.xml — 市场营销策略 - -- 16 页 | 色调:dark | 正式度:creative -- 配色:纯黑底 `#0b0b0b`,红橙霓虹渐变 `#ff0000 → #fa6627`,紫蓝 `#bc50ff → #2f2bfd` -- 结构:封面 → 目录 → 内容×13 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-15` | 结尾 `16` -- **适用**:营销策略、品牌推广。最具视觉冲击力,霓虹风格 - -### marketing_plan.xml — 营销策划方案 - -- 15 页 | 色调:dark | 正式度:formal -- 配色:近黑底 `#18181a`,亮黄 `#ffdb1d` 强调,灰色 `#93969c` 文字 -- 结构:封面 → 目录 → 内容×10 → 数据 → 内容 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-12, 14` | 结尾 `15` -- **适用**:营销策划、推广计划。黄+黑高对比,醒目 - -### product_whitepaper.xml — 产品白皮书 - -- 21 页 | 色调:colorful | 正式度:formal -- 配色:图片底图,暖橙粉渐变 `#ffaeac → #ffe6c8`,珊瑚 `#ff7d34 → #ff3ebd` -- 结构:封面 → 目录 → 内容×18 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-20` | 结尾 `21` -- **适用**:产品白皮书、技术白皮书、深度报告。页数最多(21 页),暖色调 - -### brand_operations_plan.xml — 品牌运营计划 - -- 18 页 | 色调:light | 正式度:formal -- 配色:浅灰底 `#eff2f6`,中蓝 `#3c6fe5` 点缀 -- 结构:封面 → 目录 → [分节页 → 内容]×5 → 结尾(5 个分节,结构最清晰) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 6, 9, 12, 15` | 内容 `4-5, 7-8, 10-11, 13-14, 16-17` | 结尾 `18` -- **适用**:品牌运营、年度运营计划。蓝灰企业风,分节最规范 - -### brand_logo_design.xml — 品牌标志设计 - -- 16 页 | 色调:light | 正式度:formal -- 配色:近白底 `#fbfbfb`,亮蓝 `#1c66f6` 点缀,浅蓝卡片 `#c6e7ff` -- 结构:封面 → 目录 → 内容×7 → 数据 → 内容×4 → 数据 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-9, 11-14` | 结尾 `16` -- **适用**:品牌设计、VI 设计提案。清爽蓝白,专业设计感 - ---- - -## operations — 运营 - -### marketing_plan.xml — 营销策划方案 - -- 15 页 | 色调:dark | 正式度:formal -- 配色:近黑底 `#18181a`,亮黄 `#ffdb1d` 强调,灰色 `#93969c` 文字 -- 结构:封面 → 目录 → 内容×10 → 数据 → 内容 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-12, 14` | 结尾 `15` -- **适用**:运营策划、营销活动方案。黄+黑高对比,醒目 - -### product_promotion.xml — 产品推广方案 - -- 13 页 | 色调:light | 正式度:formal -- 配色:白底,深灰 `#2b2f36` 强调,图片裁切与几何色块组合 -- 结构:封面 → 目录 → 内容×6 → 分节 → 内容×3 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `9` | 内容 `3-8, 10-12` | 结尾 `13` -- **适用**:产品推广、运营增长方案。适合图文展示和分阶段推广计划 - -### brand_operations_plan.xml — 品牌运营计划 - -- 18 页 | 色调:light | 正式度:formal -- 配色:浅灰底 `#eff2f6`,中蓝 `#3c6fe5` 点缀 -- 结构:封面 → 目录 → [分节页 → 内容]×5 → 结尾(5 个分节,结构最清晰) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 6, 9, 12, 15` | 内容 `4-5, 7-8, 10-11, 13-14, 16-17` | 结尾 `18` -- **适用**:品牌运营、年度运营计划。蓝灰企业风,分节规范 - -### brand_logo_design.xml — 品牌标志设计 - -- 16 页 | 色调:light | 正式度:formal -- 配色:近白底 `#fbfbfb`,亮蓝 `#1c66f6` 点缀,浅蓝卡片 `#c6e7ff` -- 结构:封面 → 目录 → 内容×7 → 数据 → 内容×4 → 数据 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-9, 11-14` | 结尾 `16` -- **适用**:品牌设计、运营视觉提案。清爽蓝白,专业设计感 - ---- - -## hr — 人力资源 - -### employee_training.xml — 员工培训 - -- 14 页 | 色调:dark | 正式度:formal -- 配色:近黑底 `rgba(13,20,32)`,图片分节页交替,单色简洁 -- 结构:封面 → 目录 → [分节页(01-05) → 内容]×5 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 5, 7, 9, 11` | 内容 `4, 6, 8, 10, 12-13` | 结尾 `14` -- **适用**:员工培训、规章制度宣讲。暗色严肃风,5 个章节分节页 - -### employee_training_workshop.xml — 员工培训训练 - -- 19 页 | 色调:colorful | 正式度:casual -- 配色:暖米底 `rgba(247,245,240)` + 深灰 `rgba(60,60,60)` 交替,5 种彩色点缀(钢蓝、青绿、橄榄金、鲑鱼粉) -- 结构:封面 → 目录 → [深色标题卡 → 浅色内容]×7 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 5, 7, 9, 11, 13, 15` | 内容 `4, 6, 8, 10, 12, 14, 16-18` | 结尾 `19` -- **适用**:培训工作坊、技能培训。温暖多彩,轻松氛围 - -### onboarding.xml — 新人入职培训 - -- 15 页 | 色调:dark | 正式度:formal -- 配色:深炭灰底 `rgba(43,47,54)`,亮紫 `rgba(75,63,221)` 点缀,浅灰卡片 `rgba(243,244,246)` -- 结构:封面 → 目录 → [分节页(01-05) → 内容]×5 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 5, 7, 9, 11` | 内容 `4, 6, 8, 10, 12-14` | 结尾 `15` -- **适用**:新人入职、公司介绍。紫色 CTA 按钮,包含公司概况/愿景/价值观/流程/制度等章节 - ---- - -## administration — 行政 - -### all_hands_meeting.xml — 全员大会 - -- 18 页 | 色调:light | 正式度:formal -- 配色:蓝紫渐变图片底图,毛玻璃白色卡片(alpha=0.7),薰衣草 `rgba(155,177,255)` 点缀 -- 结构:封面 → 目录 → [分节页 → 内容]×4 → 结尾(含图表页) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 7, 11, 15` | 内容 `4-6, 8-10, 12-14, 16-17` | 结尾 `18` -- **适用**:全员大会、季度会议、公司大会。毛玻璃风格,蓝紫渐变,含 chart 图表 - -### company_intro.xml — 企业介绍 - -- 16 页 | 色调:light | 正式度:formal -- 配色:白底极简,金黄 `rgba(255,196,25)` 点缀,深灰 `rgba(31,35,41)` 文字 -- 结构:封面 → 目录 → 内容×12 → 数据(chart) → 结尾(含图表页) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-14` | 结尾 `16` -- **适用**:企业介绍、公司宣传。极简白底,中英双语,含行业前景图表 - -### corporate_culture.xml — 企业文化宣传 - -- 17 页 | 色调:dark | 正式度:formal -- 配色:深炭灰底 `rgba(31,35,41)`,橙红 `rgba(255,104,68)` 强调,浅灰 `rgba(246,246,246)` 内容区 -- 结构:封面 → 前言 → 目录 → [分节页 → 内容]×4 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `3` | 分节 `4, 7, 10, 13` | 内容 `2, 5-6, 8-9, 11-12, 14-16` | 结尾 `17` -- **适用**:企业文化、公司愿景宣传。含前言页、组织架构页,橙红活力色 - -### annual_gala.xml — 年度盛典 - -- 16 页 | 色调:dark | 正式度:creative -- 配色:近黑底 `rgba(16,15,21)`,紫蓝青多色渐变 `rgba(210,132,232) → rgba(69,96,245)` 霓虹风 -- 结构:封面 → 目录 → [分节页 → 内容]×6 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 5, 7, 9, 11, 13` | 内容 `4, 6, 8, 10, 12, 14-15` | 结尾 `16` -- **适用**:年会、庆典、颁奖典礼。多彩霓虹渐变,节日庆典感,含 LOGO 占位 - ---- - -## personal — 个人 - -### experience_sharing.xml — 经验分享 - -- 20 页 | 色调:light | 正式度:casual -- 配色:图片底图,亮蓝 `rgba(52,113,252)` 点缀,毛玻璃白色卡片(alpha=0.7) -- 结构:封面 → 目录 → 内容×17 → 结尾(含 table 表格页、前后对比布局) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-19` | 结尾 `20` -- **适用**:经验分享、项目复盘分享。含步骤流程页、数据指标展示、表格 - -### teaching_sharing.xml — 分享教学 - -- 20 页 | 色调:colorful | 正式度:casual -- 配色:插画风图片底图,蓝紫 `rgba(128,145,239)` + 暖橙 `rgba(242,170,104)` 双色调 -- 结构:封面 → 目录 → 内容×17 → 结尾(含 Demo 案例、痛点分析、推荐书单) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-19` | 结尾 `20` -- **适用**:教学分享、技术分享、读书会。温暖蓝橙配色,含 chevron 流程图 - -### personal_resume.xml — 个人简历 - -- 16 页 | 色调:dark | 正式度:formal -- 配色:深炭灰图片底图,暖橙 `rgba(253,151,51)` + 霓虹绿 `rgba(76,241,29)` 渐变点缀 -- 结构:封面(含联系方式) → 目录 → [分节页 → 内容]×4 → 结尾 -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `3, 6, 9, 12` | 内容 `4-5, 7-8, 10-11, 13-15` | 结尾 `16` -- **适用**:个人简历、求职展示。橙绿双色点缀,含个人信息字段 - -### promotion_report.xml — 职位晋升汇报 - -- 15 页 | 色调:dark | 正式度:formal -- 配色:纯黑底 `rgba(3,3,1)`,薰衣草渐变 `rgba(216,216,255) → rgba(171,194,255)` 点缀,白色文字 -- 结构:封面 → 目录 → 内容×12 → 结尾(中英双语标题) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-14` | 结尾 `15` -- **适用**:晋升汇报、述职报告。暗色稳重 + 薰衣草柔和点缀 - -### promotion_defense.xml — 晋级答辩 - -- 11 页 | 色调:light | 正式度:formal -- 配色:白底,亮紫 `rgba(74,58,255)` 点缀 -- 结构:封面 → 目录 → 内容×8 → 结尾(紧凑无分节页) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-10` | 结尾 `11` -- **适用**:晋级答辩、技术答辩。最精简(11 页),紫色点缀,中英双语 - -### self_intro.xml — 个人介绍 - -- 11 页 | 色调:colorful | 正式度:casual -- 配色:暖白底 `rgba(248,247,246)`,5 种彩色(红 `#d83931`、青 `#17b69c`、橙 `#ec914e`、黄 `#fad355`、蓝 `#3347ff`) -- 结构:封面 → 内容×9 → 结尾(含表格、甜甜圈图表、饼图) -- 页型索引(建议先读):封面 `1` | 目录 `无` | 分节 `无` | 内容 `2-10` | 结尾 `11` -- **适用**:个人介绍、设计师作品集。shape 类型最丰富,图表元素多 - ---- - -## misc — 其他 - -### book_sharing.xml — 读书分享 - -- 16 页 | 色调:light | 正式度:casual -- 配色:白底 + 深橄榄绿侧边栏 `rgba(43,54,44)`,棕褐 `rgba(128,66,8)` 点缀 -- 结构:封面 → 内容×14 → 结尾(中文传统编号:壹贰叁肆) -- 页型索引(建议先读):封面 `1` | 目录 `无` | 分节 `无` | 内容 `2-15` | 结尾 `16` -- **适用**:读书分享、文学赏析。文艺复古风,装饰性诗句分隔,中国传统美学 - -### club_event_plan.xml — 社团活动策划 - -- 15 页 | 色调:dark | 正式度:casual -- 配色:纯黑底,红色 `rgba(216,57,49)` + 金色 `rgba(219,168,0)` 双色强调 -- 结构:封面 → 目录 → 内容×12 → 结尾(含预算页、应急方案页) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-14` | 结尾 `15` -- **适用**:活动策划、社团方案。黑红金配色,含预算/应急等实用页面 - -### student_career_plan.xml — 学生职业规划 - -- 15 页 | 色调:colorful | 正式度:casual -- 配色:深靛蓝底 `rgba(21,20,87)`,霓虹多彩(品红、青、黄、粉、热粉) -- 结构:封面 → 目录 → 内容×12 → 结尾(含 SWOT 分析、短/中/长期目标时间线) -- 页型索引(建议先读):封面 `1` | 目录 `2` | 分节 `无` | 内容 `3-14` | 结尾 `15` -- **适用**:职业规划、学生汇报。最鲜艳多彩,霓虹风格,含 SWOT 和时间线 - ---- - -## 快速匹配索引 - -### 按场景 - -| 场景关键词 | 推荐模板(优先级从高到低) | -|-----------|------------------------| -| 工作汇报/月报/周报 | `office--work_report` > `office--work_summary` > `office--light_general` | -| 工作总结/年度总结 | `office--work_summary_report` > `office--work_summary` | -| 季度复盘/OKR | `office--quarterly_review` > `office--work_summary_report` | -| 部门年度汇报 | `office--dept_annual_report` > `office--work_summary_report` | -| 项目启动/技术宣讲 | `office--project_kickoff` | -| 产品介绍/产品发布 | `product--product_intro` > `product--product_analysis` | -| 产品分析/竞品分析 | `product--product_analysis` | -| 市场分析/行业报告 | `product--market_analysis` | -| 商业案例 | `product--business_case_analysis` | -| 商业计划书/创业 | `marketing--business_plan` > `marketing--roadshow_business_plan` | -| 融资路演/企业路演 | `marketing--roadshow_business_plan` | -| 品牌传播/公关 | `marketing--brand_communication` | -| 营销策略/推广 | `marketing--marketing_strategy` > `marketing--marketing_plan` | -| 产品白皮书 | `marketing--product_whitepaper` | -| 品牌运营/年度计划 | `marketing--brand_operations_plan` | -| 品牌设计/VI | `marketing--brand_logo_design` | -| 员工培训/制度宣讲 | `hr--employee_training` > `hr--employee_training_workshop` | -| 新人入职 | `hr--onboarding` | -| 全员大会/公司大会 | `administration--all_hands_meeting` | -| 企业介绍/公司宣传 | `administration--company_intro` | -| 企业文化 | `administration--corporate_culture` | -| 年会/庆典/颁奖 | `administration--annual_gala` | -| 经验分享/项目分享 | `personal--experience_sharing` | -| 教学分享/技术分享 | `personal--teaching_sharing` | -| 个人简历/求职 | `personal--personal_resume` | -| 晋升汇报/述职 | `personal--promotion_report` > `personal--promotion_defense` | -| 个人介绍 | `personal--self_intro` | -| 读书分享 | `misc--book_sharing` | -| 活动策划 | `misc--club_event_plan` | -| 职业规划 | `misc--student_career_plan` | - -### 按色调 - -| 色调 | 模板 | -|------|------| -| **light** | `office--light_general` ⭐, `office--work_report`, `office--work_summary`, `product--product_analysis`, `marketing--business_plan`, `marketing--roadshow_business_plan`, `marketing--brand_operations_plan`, `marketing--brand_logo_design`, `administration--all_hands_meeting`, `administration--company_intro`, `personal--experience_sharing`, `personal--promotion_defense`, `misc--book_sharing` | -| **dark** | `office--dark_general` ⭐, `office--work_summary_report`, `office--quarterly_review`, `office--dept_annual_report`, `office--project_kickoff`, `product--market_analysis`, `product--business_case_analysis`, `product--product_promotion`, `marketing--brand_communication`, `marketing--marketing_strategy`, `marketing--marketing_plan`, `hr--employee_training`, `hr--onboarding`, `administration--corporate_culture`, `administration--annual_gala`, `personal--personal_resume`, `personal--promotion_report`, `misc--club_event_plan` | -| **colorful** | `product--product_intro`, `marketing--product_whitepaper`, `hr--employee_training_workshop`, `personal--self_intro`, `personal--teaching_sharing`, `misc--student_career_plan` | diff --git a/skills/lark-slides/references/template-index.json b/skills/lark-slides/references/template-index.json deleted file mode 100644 index 5d3af9fdc..000000000 --- a/skills/lark-slides/references/template-index.json +++ /dev/null @@ -1,1853 +0,0 @@ -{ - "schema_version": "1.1.0", - "generated_at": "2026-04-28T07:58:48.848Z", - "template_count": 42, - "templates": [ - { - "template_id": "office--light_general", - "category": "office", - "category_label": "办公通用", - "scene": "浅色通用变体库", - "tone": "light", - "formality": "formal", - "is_general_template": true, - "slide_count": 54, - "presentation_title": "白底通用模板", - "palette": "白底 #f4f5f6,蓝色点缀 #4e6efd,深灰文字 #1f2329", - "structure": null, - "page_types": "封面×2, 目录×4, 分节页, 内容×30, 数据卡片×2, 结尾", - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "任何需要浅色风格的场景,从中挑选合适的页面布局", - "ranges": [ - { - "label": "封面", - "range": "1-2" - }, - { - "label": "目录", - "range": "3-6" - }, - { - "label": "分节/过渡", - "range": "7-8" - }, - { - "label": "内容/图文/时间线/数据", - "range": "9-53" - }, - { - "label": "结尾", - "range": "54" - } - ] - }, - { - "template_id": "office--dark_general", - "category": "office", - "category_label": "办公通用", - "scene": "深色通用变体库", - "tone": "dark", - "formality": "formal", - "is_general_template": true, - "slide_count": 56, - "presentation_title": "黑底通用模板", - "palette": "深灰底 #1f2329,蓝色点缀 #4e6efd,白色文字", - "structure": null, - "page_types": "封面×2, 目录×4, 分节页, 内容×31, 数据卡片×2, 结尾", - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "任何需要深色风格的场景,渐变填充(蓝-青)、透明度叠加", - "ranges": [ - { - "label": "封面", - "range": "1-2" - }, - { - "label": "目录", - "range": "3-6" - }, - { - "label": "分节/过渡", - "range": "7-8" - }, - { - "label": "内容/图文/时间线/数据", - "range": "9-54" - }, - { - "label": "结尾", - "range": "55-56" - } - ] - }, - { - "template_id": "office--work_report", - "category": "office", - "category_label": "办公通用", - "scene": "工作汇报", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 13, - "presentation_title": "工作汇报", - "palette": "图片底图 + 半透明白色卡片(alpha=0.51),紫色 #7f3bf5/蓝色 #3370ff 点缀", - "structure": "封面 → 目录(4 Part) → 数据页 → 内容×9 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "image-backed", - "section-divider", - "two-column-text" - ], - "use_cases": "工作汇报、月报、项目进展。中英双语标题,4 宫格布局,圆角卡片", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "4-12" - }, - { - "label": "结尾", - "range": "13" - } - ] - }, - { - "template_id": "office--work_summary_report", - "category": "office", - "category_label": "办公通用", - "scene": "工作总结报告", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "工作总结报告", - "palette": "深灰底 #2b2f36,深蓝 #3a6cea/靛蓝 #0e5efd 点缀", - "structure": "封面 → 目录 → [分节页 → 内容]×4 → 结尾(4 个清晰分节)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "hero-image-left-text-right", - "hero-text-left-image-right", - "text-focused", - "two-column-text" - ], - "use_cases": "年度/季度工作总结,分节清晰的正式汇报", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 6, 9, 12" - }, - { - "label": "内容", - "range": "4-5, 7-8, 10-11, 13-15" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "office--work_summary", - "category": "office", - "category_label": "办公通用", - "scene": "工作总结", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 20, - "presentation_title": "工作总结", - "palette": "暖黄 #fff6dc + 浅蓝 #ddeff7 交替,天蓝 #1393cf 点缀,金色 #f7c15f 强调", - "structure": "封面 → 目录 → 内容×7 → 数据×2 → 内容×8 → 结尾", - "page_types": null, - "layout_tags": [ - "text-focused" - ], - "use_cases": "轻松温暖风格的工作总结。shape 类型最丰富(饼图、三角、弧形等)", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-9, 12-19" - }, - { - "label": "结尾", - "range": "20" - } - ] - }, - { - "template_id": "office--quarterly_review", - "category": "office", - "category_label": "办公通用", - "scene": "季度复盘", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 17, - "presentation_title": "季度复盘", - "palette": "海军蓝图片底图,钢蓝 #435671 文字,半透明白色叠加(alpha=0.6)", - "structure": "封面 → 目录 → 内容×2 → 数据×2 → 内容×10 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "image-backed", - "section-divider", - "two-column-text" - ], - "use_cases": "季度复盘、OKR 回顾,数据驱动型汇报", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-4, 7-16" - }, - { - "label": "结尾", - "range": "17" - } - ] - }, - { - "template_id": "office--dept_annual_report", - "category": "office", - "category_label": "办公通用", - "scene": "部门年度汇报", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 17, - "presentation_title": "部门年度工作汇报", - "palette": "黑色底图 + 极光渐变(紫/青/蓝),青色 #64e8d6 → 蓝色 #73bbff 渐变点缀", - "structure": "封面 → 目录 → 内容×4 → 数据 → 内容×9 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "image-backed", - "two-column-text" - ], - "use_cases": "年度部门汇报,视觉冲击力强,多彩渐变风", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-6, 8-16" - }, - { - "label": "结尾", - "range": "17" - } - ] - }, - { - "template_id": "office--project_kickoff", - "category": "office", - "category_label": "办公通用", - "scene": "项目启动宣讲", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "项目启动宣讲", - "palette": "蓝色渐变底 linear-gradient(#4b5cf5, #233afb),紫色 #ad82f7 强调", - "structure": "封面 → 目录 → 内容×15 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "hero-image-left-text-right", - "hero-text-left-image-right", - "text-focused", - "two-column-text" - ], - "use_cases": "项目启动、产品发布、技术宣讲。大胆蓝紫渐变,卡片式布局", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "product--product_analysis", - "category": "product", - "category_label": "产品", - "scene": "产品分析报告", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 17, - "presentation_title": "产品分析报告", - "palette": "柔蓝渐变底图 #deebff → #ffffff,蓝色 #2e4ef6 → #2182f4 点缀,浅蓝卡片 #e2eaf9", - "structure": "封面 → 目录 → 内容 → 数据 → 内容×4 → 数据 → 内容×5 → SWOT → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "section-divider", - "two-column-text" - ], - "use_cases": "产品分析、竞品分析。包含 SWOT 分析页,数据图表页", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3, 5-8, 10-16" - }, - { - "label": "结尾", - "range": "17" - } - ] - }, - { - "template_id": "product--product_intro", - "category": "product", - "category_label": "产品", - "scene": "产品介绍", - "tone": "colorful", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "产品介绍", - "palette": "多彩渐变(每个分节不同色系:青蓝、橙红、紫、蓝靛)", - "structure": "封面 → 目录 → [分节页 → 内容]×4 → 结尾(含对比页、时间线页)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "image-backed", - "two-column-text" - ], - "use_cases": "产品发布、产品介绍。视觉最丰富,每节独立配色", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 7, 11, 15" - }, - { - "label": "内容", - "range": "4-6, 8-10, 12-14, 16-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "product--market_analysis", - "category": "product", - "category_label": "产品", - "scene": "市场分析报告", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 11, - "presentation_title": "市场分析报告", - "palette": "黑底,蓝紫渐变 #0d47db → #7d00fa 点缀", - "structure": "封面 → 目录 → 分节 → 数据 → 内容×2 → 分节 → 内容×3 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "市场分析、行业报告。精简紧凑(11 页),蓝紫科技感", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 7" - }, - { - "label": "内容", - "range": "5-6, 8-10" - }, - { - "label": "结尾", - "range": "11" - } - ] - }, - { - "template_id": "product--business_case_analysis", - "category": "product", - "category_label": "产品", - "scene": "商业案例分析", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "商业案例分析", - "palette": "深灰图片底图,金属银渐变 #9c9c9e → #c0c5d3 点缀", - "structure": "封面 → 内容 → [分节页 → 内容]×4 → 结尾(4 个清晰分节)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "section-divider", - "two-column-text" - ], - "use_cases": "商业案例、行业案例拆解。金属质感,分节明确", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "" - }, - { - "label": "分节", - "range": "3, 7, 11, 15" - }, - { - "label": "内容", - "range": "2, 4-6, 8-10, 12-14, 16-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "product--product_promotion", - "category": "product", - "category_label": "产品", - "scene": "产品推广方案", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 13, - "presentation_title": "产品推广方案-裂图重新上传", - "palette": "深灰 #2b2f36 + 白色交替,极简黑白", - "structure": "封面 → 目录 → 内容×6 → 分节 → 内容×3 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "text-focused", - "two-column-text" - ], - "use_cases": "推广方案、营销策略。极简风,黑白对比", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "9" - }, - { - "label": "内容", - "range": "3-8, 10-12" - }, - { - "label": "结尾", - "range": "13" - } - ] - }, - { - "template_id": "product--product_promotion_2", - "category": "product", - "category_label": "产品", - "scene": "产品推广方案二", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 13, - "presentation_title": "产品推广方案-裂图重新上传", - "palette": "白底,深灰 #2b2f36 强调,图片裁切与几何色块组合", - "structure": "封面 → 目录 → 内容×6 → 分节 → 内容×3 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "text-focused", - "two-column-text" - ], - "use_cases": "产品推广、数字营销方案。比 product_promotion.xml 更偏浅色商务和图文展示", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "9" - }, - { - "label": "内容", - "range": "3-8, 10-12" - }, - { - "label": "结尾", - "range": "13" - } - ] - }, - { - "template_id": "marketing--business_plan", - "category": "marketing", - "category_label": "市场营销", - "scene": "商业计划书", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "商业计划书", - "palette": "白底,蓝青渐变封面 #0b3be5 → #25d8ff,鲜蓝 #194cff 点缀,含甜甜圈图表", - "structure": "封面 → 目录 → 内容×12 → 时间线 → 内容×2 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "text-focused", - "two-column-text" - ], - "use_cases": "商业计划书、创业路演。含时间线页、图表页", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-14, 16-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "marketing--roadshow_business_plan", - "category": "marketing", - "category_label": "市场营销", - "scene": "企业路演商业计划书", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 20, - "presentation_title": "企业路演商业计划书", - "palette": "白底,绿色 #20b14e 点缀(增长/商业感)", - "structure": "封面 → 目录 → [分节页 → 内容]×5 → 结尾(含时间线、流程图)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "text-focused", - "two-column-text" - ], - "use_cases": "融资路演、企业路演。绿色增长主题,含 chevron 流程图形", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 6, 9, 12, 15" - }, - { - "label": "内容", - "range": "4-5, 7-8, 10-11, 13-14, 16-19" - }, - { - "label": "结尾", - "range": "20" - } - ] - }, - { - "template_id": "marketing--brand_communication", - "category": "marketing", - "category_label": "市场营销", - "scene": "品牌传播方案", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 17, - "presentation_title": "品牌传播方案", - "palette": "黑色图片底图,青绿渐变 #59c2ff → #a1ffc8 点缀,半透明白色卡片", - "structure": "封面 → 目录 → 内容×8 → 数据 → 内容×5 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "品牌传播、公关方案。青绿科技感 + 暗色背景", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-10, 12-16" - }, - { - "label": "结尾", - "range": "17" - } - ] - }, - { - "template_id": "marketing--marketing_strategy", - "category": "marketing", - "category_label": "市场营销", - "scene": "市场营销策略", - "tone": "dark", - "formality": "creative", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "市场营销策略", - "palette": "纯黑底 #0b0b0b,红橙霓虹渐变 #ff0000 → #fa6627,紫蓝 #bc50ff → #2f2bfd", - "structure": "封面 → 目录 → 内容×13 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "image-backed", - "section-divider", - "two-column-text" - ], - "use_cases": "营销策略、品牌推广。最具视觉冲击力,霓虹风格", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-15" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "marketing--marketing_plan", - "category": "marketing", - "category_label": "市场营销", - "scene": "营销策划方案", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 15, - "presentation_title": "营销策划方案-裂图重新上传", - "palette": "近黑底 #18181a,亮黄 #ffdb1d 强调,灰色 #93969c 文字", - "structure": "封面 → 目录 → 内容×10 → 数据 → 内容 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "text-focused", - "two-column-text" - ], - "use_cases": "营销策划、推广计划。黄+黑高对比,醒目", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-12, 14" - }, - { - "label": "结尾", - "range": "15" - } - ] - }, - { - "template_id": "marketing--product_whitepaper", - "category": "marketing", - "category_label": "市场营销", - "scene": "产品白皮书", - "tone": "colorful", - "formality": "formal", - "is_general_template": false, - "slide_count": 21, - "presentation_title": "产品白皮书", - "palette": "图片底图,暖橙粉渐变 #ffaeac → #ffe6c8,珊瑚 #ff7d34 → #ff3ebd", - "structure": "封面 → 目录 → 内容×18 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "hero-text-left-image-right", - "image-backed", - "section-divider", - "two-column-text" - ], - "use_cases": "产品白皮书、技术白皮书、深度报告。页数最多(21 页),暖色调", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-20" - }, - { - "label": "结尾", - "range": "21" - } - ] - }, - { - "template_id": "marketing--brand_operations_plan", - "category": "marketing", - "category_label": "市场营销", - "scene": "品牌运营计划", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "品牌运营计划-裂图重新上传", - "palette": "浅灰底 #eff2f6,中蓝 #3c6fe5 点缀", - "structure": "封面 → 目录 → [分节页 → 内容]×5 → 结尾(5 个分节,结构最清晰)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "text-focused", - "two-column-text" - ], - "use_cases": "品牌运营、年度运营计划。蓝灰企业风,分节最规范", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 6, 9, 12, 15" - }, - { - "label": "内容", - "range": "4-5, 7-8, 10-11, 13-14, 16-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "marketing--brand_logo_design", - "category": "marketing", - "category_label": "市场营销", - "scene": "品牌标志设计", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "品牌标志设计", - "palette": "近白底 #fbfbfb,亮蓝 #1c66f6 点缀,浅蓝卡片 #c6e7ff", - "structure": "封面 → 目录 → 内容×7 → 数据 → 内容×4 → 数据 → 结尾", - "page_types": null, - "layout_tags": [ - "full-bleed-image-caption", - "image-backed", - "text-focused", - "two-column-text" - ], - "use_cases": "品牌设计、VI 设计提案。清爽蓝白,专业设计感", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-9, 11-14" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "operations--marketing_plan", - "category": "operations", - "category_label": "运营", - "scene": "营销策划方案", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 15, - "presentation_title": "营销策划方案-裂图重新上传", - "palette": "近黑底 #18181a,亮黄 #ffdb1d 强调,灰色 #93969c 文字", - "structure": "封面 → 目录 → 内容×10 → 数据 → 内容 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "text-focused", - "two-column-text" - ], - "use_cases": "运营策划、营销活动方案。黄+黑高对比,醒目", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-12, 14" - }, - { - "label": "结尾", - "range": "15" - } - ] - }, - { - "template_id": "operations--product_promotion", - "category": "operations", - "category_label": "运营", - "scene": "产品推广方案", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 13, - "presentation_title": "产品推广方案-裂图重新上传", - "palette": "白底,深灰 #2b2f36 强调,图片裁切与几何色块组合", - "structure": "封面 → 目录 → 内容×6 → 分节 → 内容×3 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "text-focused", - "two-column-text" - ], - "use_cases": "产品推广、运营增长方案。适合图文展示和分阶段推广计划", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "9" - }, - { - "label": "内容", - "range": "3-8, 10-12" - }, - { - "label": "结尾", - "range": "13" - } - ] - }, - { - "template_id": "operations--brand_operations_plan", - "category": "operations", - "category_label": "运营", - "scene": "品牌运营计划", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "品牌运营计划-裂图重新上传", - "palette": "浅灰底 #eff2f6,中蓝 #3c6fe5 点缀", - "structure": "封面 → 目录 → [分节页 → 内容]×5 → 结尾(5 个分节,结构最清晰)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "text-focused", - "two-column-text" - ], - "use_cases": "品牌运营、年度运营计划。蓝灰企业风,分节规范", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 6, 9, 12, 15" - }, - { - "label": "内容", - "range": "4-5, 7-8, 10-11, 13-14, 16-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "operations--brand_logo_design", - "category": "operations", - "category_label": "运营", - "scene": "品牌标志设计", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "品牌标志设计", - "palette": "近白底 #fbfbfb,亮蓝 #1c66f6 点缀,浅蓝卡片 #c6e7ff", - "structure": "封面 → 目录 → 内容×7 → 数据 → 内容×4 → 数据 → 结尾", - "page_types": null, - "layout_tags": [ - "full-bleed-image-caption", - "image-backed", - "text-focused", - "two-column-text" - ], - "use_cases": "品牌设计、运营视觉提案。清爽蓝白,专业设计感", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-9, 11-14" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "hr--employee_training", - "category": "hr", - "category_label": "人力资源", - "scene": "员工培训", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 14, - "presentation_title": "员工培训", - "palette": "近黑底 rgba(13,20,32),图片分节页交替,单色简洁", - "structure": "封面 → 目录 → [分节页(01-05) → 内容]×5 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "员工培训、规章制度宣讲。暗色严肃风,5 个章节分节页", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 5, 7, 9, 11" - }, - { - "label": "内容", - "range": "4, 6, 8, 10, 12-13" - }, - { - "label": "结尾", - "range": "14" - } - ] - }, - { - "template_id": "hr--employee_training_workshop", - "category": "hr", - "category_label": "人力资源", - "scene": "员工培训训练", - "tone": "colorful", - "formality": "casual", - "is_general_template": false, - "slide_count": 19, - "presentation_title": "员工培训训练", - "palette": "暖米底 rgba(247,245,240) + 深灰 rgba(60,60,60) 交替,5 种彩色点缀(钢蓝、青绿、橄榄金、鲑鱼粉)", - "structure": "封面 → 目录 → [深色标题卡 → 浅色内容]×7 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "two-column-text" - ], - "use_cases": "培训工作坊、技能培训。温暖多彩,轻松氛围", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 5, 7, 9, 11, 13, 15" - }, - { - "label": "内容", - "range": "4, 6, 8, 10, 12, 14, 16-18" - }, - { - "label": "结尾", - "range": "19" - } - ] - }, - { - "template_id": "hr--onboarding", - "category": "hr", - "category_label": "人力资源", - "scene": "新人入职培训", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 15, - "presentation_title": "新人入职培训", - "palette": "深炭灰底 rgba(43,47,54),亮紫 rgba(75,63,221) 点缀,浅灰卡片 rgba(243,244,246)", - "structure": "封面 → 目录 → [分节页(01-05) → 内容]×5 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "新人入职、公司介绍。紫色 CTA 按钮,包含公司概况/愿景/价值观/流程/制度等章节", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 5, 7, 9, 11" - }, - { - "label": "内容", - "range": "4, 6, 8, 10, 12-14" - }, - { - "label": "结尾", - "range": "15" - } - ] - }, - { - "template_id": "administration--all_hands_meeting", - "category": "administration", - "category_label": "行政", - "scene": "全员大会", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 18, - "presentation_title": "全员大会", - "palette": "蓝紫渐变图片底图,毛玻璃白色卡片(alpha=0.7),薰衣草 rgba(155,177,255) 点缀", - "structure": "封面 → 目录 → [分节页 → 内容]×4 → 结尾(含图表页)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "image-backed", - "two-column-text" - ], - "use_cases": "全员大会、季度会议、公司大会。毛玻璃风格,蓝紫渐变,含 chart 图表", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 7, 11, 15" - }, - { - "label": "内容", - "range": "4-6, 8-10, 12-14, 16-17" - }, - { - "label": "结尾", - "range": "18" - } - ] - }, - { - "template_id": "administration--company_intro", - "category": "administration", - "category_label": "行政", - "scene": "企业介绍", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "企业介绍", - "palette": "白底极简,金黄 rgba(255,196,25) 点缀,深灰 rgba(31,35,41) 文字", - "structure": "封面 → 目录 → 内容×12 → 数据(chart) → 结尾(含图表页)", - "page_types": null, - "layout_tags": [ - "full-bleed-image-caption", - "image-backed", - "text-focused" - ], - "use_cases": "企业介绍、公司宣传。极简白底,中英双语,含行业前景图表", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-14" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "administration--corporate_culture", - "category": "administration", - "category_label": "行政", - "scene": "企业文化宣传", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 17, - "presentation_title": "企业文化宣传", - "palette": "深炭灰底 rgba(31,35,41),橙红 rgba(255,104,68) 强调,浅灰 rgba(246,246,246) 内容区", - "structure": "封面 → 前言 → 目录 → [分节页 → 内容]×4 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "企业文化、公司愿景宣传。含前言页、组织架构页,橙红活力色", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "3" - }, - { - "label": "分节", - "range": "4, 7, 10, 13" - }, - { - "label": "内容", - "range": "2, 5-6, 8-9, 11-12, 14-16" - }, - { - "label": "结尾", - "range": "17" - } - ] - }, - { - "template_id": "administration--annual_gala", - "category": "administration", - "category_label": "行政", - "scene": "年度盛典", - "tone": "dark", - "formality": "creative", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "企业年会", - "palette": "近黑底 rgba(16,15,21),紫蓝青多色渐变 rgba(210,132,232) → rgba(69,96,245) 霓虹风", - "structure": "封面 → 目录 → [分节页 → 内容]×6 → 结尾", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "年会、庆典、颁奖典礼。多彩霓虹渐变,节日庆典感,含 LOGO 占位", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 5, 7, 9, 11, 13" - }, - { - "label": "内容", - "range": "4, 6, 8, 10, 12, 14-15" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "personal--experience_sharing", - "category": "personal", - "category_label": "个人", - "scene": "经验分享", - "tone": "light", - "formality": "casual", - "is_general_template": false, - "slide_count": 20, - "presentation_title": "经验分享", - "palette": "图片底图,亮蓝 rgba(52,113,252) 点缀,毛玻璃白色卡片(alpha=0.7)", - "structure": "封面 → 目录 → 内容×17 → 结尾(含 table 表格页、前后对比布局)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "image-backed", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "经验分享、项目复盘分享。含步骤流程页、数据指标展示、表格", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-19" - }, - { - "label": "结尾", - "range": "20" - } - ] - }, - { - "template_id": "personal--teaching_sharing", - "category": "personal", - "category_label": "个人", - "scene": "分享教学", - "tone": "colorful", - "formality": "casual", - "is_general_template": false, - "slide_count": 20, - "presentation_title": "分享教学", - "palette": "插画风图片底图,蓝紫 rgba(128,145,239) + 暖橙 rgba(242,170,104) 双色调", - "structure": "封面 → 目录 → 内容×17 → 结尾(含 Demo 案例、痛点分析、推荐书单)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-image-left-text-right", - "hero-text-left-image-right", - "image-backed", - "two-column-text" - ], - "use_cases": "教学分享、技术分享、读书会。温暖蓝橙配色,含 chevron 流程图", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-19" - }, - { - "label": "结尾", - "range": "20" - } - ] - }, - { - "template_id": "personal--personal_resume", - "category": "personal", - "category_label": "个人", - "scene": "个人简历", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "个人简历", - "palette": "深炭灰图片底图,暖橙 rgba(253,151,51) + 霓虹绿 rgba(76,241,29) 渐变点缀", - "structure": "封面(含联系方式) → 目录 → [分节页 → 内容]×4 → 结尾", - "page_types": null, - "layout_tags": [ - "full-bleed-image-caption", - "image-backed" - ], - "use_cases": "个人简历、求职展示。橙绿双色点缀,含个人信息字段", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "3, 6, 9, 12" - }, - { - "label": "内容", - "range": "4-5, 7-8, 10-11, 13-15" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "personal--promotion_report", - "category": "personal", - "category_label": "个人", - "scene": "职位晋升汇报", - "tone": "dark", - "formality": "formal", - "is_general_template": false, - "slide_count": 15, - "presentation_title": "职位晋升汇报", - "palette": "纯黑底 rgba(3,3,1),薰衣草渐变 rgba(216,216,255) → rgba(171,194,255) 点缀,白色文字", - "structure": "封面 → 目录 → 内容×12 → 结尾(中英双语标题)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "hero-image-left-text-right", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "晋升汇报、述职报告。暗色稳重 + 薰衣草柔和点缀", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-14" - }, - { - "label": "结尾", - "range": "15" - } - ] - }, - { - "template_id": "personal--promotion_defense", - "category": "personal", - "category_label": "个人", - "scene": "晋级答辩", - "tone": "light", - "formality": "formal", - "is_general_template": false, - "slide_count": 11, - "presentation_title": "晋级答辩", - "palette": "白底,亮紫 rgba(74,58,255) 点缀", - "structure": "封面 → 目录 → 内容×8 → 结尾(紧凑无分节页)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "text-focused", - "two-column-text" - ], - "use_cases": "晋级答辩、技术答辩。最精简(11 页),紫色点缀,中英双语", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-10" - }, - { - "label": "结尾", - "range": "11" - } - ] - }, - { - "template_id": "personal--self_intro", - "category": "personal", - "category_label": "个人", - "scene": "个人介绍", - "tone": "colorful", - "formality": "casual", - "is_general_template": false, - "slide_count": 11, - "presentation_title": "个人介绍-裂图重新上传", - "palette": "暖白底 rgba(248,247,246),5 种彩色(红 #d83931、青 #17b69c、橙 #ec914e、黄 #fad355、蓝 #3347ff)", - "structure": "封面 → 内容×9 → 结尾(含表格、甜甜圈图表、饼图)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "hero-text-left-image-right", - "section-divider", - "text-focused", - "two-column-text" - ], - "use_cases": "个人介绍、设计师作品集。shape 类型最丰富,图表元素多", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "2-10" - }, - { - "label": "结尾", - "range": "11" - } - ] - }, - { - "template_id": "misc--book_sharing", - "category": "misc", - "category_label": "其他", - "scene": "读书分享", - "tone": "light", - "formality": "casual", - "is_general_template": false, - "slide_count": 16, - "presentation_title": "读书分享", - "palette": "白底 + 深橄榄绿侧边栏 rgba(43,54,44),棕褐 rgba(128,66,8) 点缀", - "structure": "封面 → 内容×14 → 结尾(中文传统编号:壹贰叁肆)", - "page_types": null, - "layout_tags": [ - "full-bleed-image-caption", - "hero-image-left-text-right", - "text-focused" - ], - "use_cases": "读书分享、文学赏析。文艺复古风,装饰性诗句分隔,中国传统美学", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "2-15" - }, - { - "label": "结尾", - "range": "16" - } - ] - }, - { - "template_id": "misc--club_event_plan", - "category": "misc", - "category_label": "其他", - "scene": "社团活动策划", - "tone": "dark", - "formality": "casual", - "is_general_template": false, - "slide_count": 15, - "presentation_title": "社团活动策划方案", - "palette": "纯黑底,红色 rgba(216,57,49) + 金色 rgba(219,168,0) 双色强调", - "structure": "封面 → 目录 → 内容×12 → 结尾(含预算页、应急方案页)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "hero-text-left-image-right", - "text-focused", - "two-column-text" - ], - "use_cases": "活动策划、社团方案。黑红金配色,含预算/应急等实用页面", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-14" - }, - { - "label": "结尾", - "range": "15" - } - ] - }, - { - "template_id": "misc--student_career_plan", - "category": "misc", - "category_label": "其他", - "scene": "学生职业规划", - "tone": "colorful", - "formality": "casual", - "is_general_template": false, - "slide_count": 15, - "presentation_title": "学生职业生涯规划", - "palette": "深靛蓝底 rgba(21,20,87),霓虹多彩(品红、青、黄、粉、热粉)", - "structure": "封面 → 目录 → 内容×12 → 结尾(含 SWOT 分析、短/中/长期目标时间线)", - "page_types": null, - "layout_tags": [ - "2x2-metric-cards", - "full-bleed-image-caption", - "hero-text-left-image-right", - "text-focused", - "two-column-text" - ], - "use_cases": "职业规划、学生汇报。最鲜艳多彩,霓虹风格,含 SWOT 和时间线", - "ranges": [ - { - "label": "封面", - "range": "1" - }, - { - "label": "目录", - "range": "2" - }, - { - "label": "分节", - "range": "" - }, - { - "label": "内容", - "range": "3-14" - }, - { - "label": "结尾", - "range": "15" - } - ] - } - ] -} diff --git a/skills/lark-slides/references/visual-planning.md b/skills/lark-slides/references/visual-planning.md index e17c9da66..2eca3bf1e 100644 --- a/skills/lark-slides/references/visual-planning.md +++ b/skills/lark-slides/references/visual-planning.md @@ -2,7 +2,7 @@ 新建演示文稿或大幅改写页面时,在 `slide_plan.json` 完成后、生成 XML 前读取本文件。目标是让 `layout_type`、`visual_focus`、`text_density` 变成实际页面几何,而不是只写在 plan 里。 -默认画布按 `960 x 540` 规划。模板 XML 可以覆盖具体坐标,但不能覆盖这些原则:页面要有主视觉区域、文本要受密度约束、不同 `layout_type` 必须产生明显不同的坐标结构。 +默认画布按 `960 x 540` 规划。已有页面回读 XML 可以影响具体坐标,但不能覆盖这些原则:页面要有主视觉区域、文本要受密度约束、不同 `layout_type` 必须产生明显不同的坐标结构。 ## Core Rules diff --git a/skills/lark-slides/scripts/template_tool.py b/skills/lark-slides/scripts/template_tool.py deleted file mode 100644 index 48c7ea6dd..000000000 --- a/skills/lark-slides/scripts/template_tool.py +++ /dev/null @@ -1,970 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2026 Lark Technologies Pte. Ltd. -# SPDX-License-Identifier: MIT - -from __future__ import annotations - -import json -import re -import sys -from datetime import datetime, timezone -from pathlib import Path -from typing import Any - - -SKILL_ROOT = Path(__file__).resolve().parent.parent -ASSETS_DIR = SKILL_ROOT / "assets" -REFERENCES_DIR = SKILL_ROOT / "references" -TEMPLATES_DIR = ASSETS_DIR / "templates" -CATALOG_PATH = REFERENCES_DIR / "template-catalog.md" -DEFAULT_INDEX_PATH = REFERENCES_DIR / "template-index.json" -LIGHTWEIGHT_INDEX_SCHEMA_VERSION = "1.1.0" - - -class TemplateToolError(Exception): - pass - - -def fail(message: str) -> None: - raise TemplateToolError(message) - - -def read_file(file_path: str | Path) -> str: - return Path(file_path).read_text(encoding="utf-8") - - -def normalize_whitespace(value: str) -> str: - return re.sub(r"\s+", " ", value).strip() - - -def strip_markdown(value: str) -> str: - return normalize_whitespace( - re.sub(r"^-\s*", "", re.sub(r"`([^`]+)`", r"\1", value.replace("**", ""))) - ) - - -def strip_xml(value: str) -> str: - stripped = re.sub(r"<!\[CDATA\[([\s\S]*?)\]\]>", r"\1", value) - stripped = re.sub(r"<[^>]+>", " ", stripped) - stripped = stripped.replace(" ", " ") - stripped = stripped.replace("&", "&") - stripped = stripped.replace("<", "<") - stripped = stripped.replace(">", ">") - stripped = stripped.replace(""", '"') - stripped = stripped.replace("'", "'") - return normalize_whitespace(stripped) - - -def compact_object(value: dict[str, Any]) -> dict[str, Any]: - return {key: entry for key, entry in value.items() if entry is not None} - - -def tokenize_query(value: str) -> list[str]: - normalized = normalize_whitespace(value.lower()) - if not normalized: - return [] - - def append_unique(target: list[str], token: str) -> None: - token = token.strip() - if token and token not in target: - target.append(token) - - tokens: list[str] = [] - for item in [item.strip() for item in re.split(r"[\s,/|,。;;::()()【】\[\]《》<>]+", normalized) if item.strip()]: - append_unique(tokens, item) - - # Chinese prompts are often complete sentences without separators, e.g. - # "帮我做一个季度工作汇报PPT". Add CJK n-grams so domain phrases such as - # "工作汇报" or "季度复盘" can still match catalog metadata. - for phrase in re.findall(r"[\u3400-\u9fff]+", normalized): - if len(phrase) < 2: - continue - max_size = min(6, len(phrase)) - for size in range(max_size, 1, -1): - for start in range(0, len(phrase) - size + 1): - append_unique(tokens, phrase[start : start + size]) - - synonym_tokens = { - "浅色": ["light"], - "白底": ["light"], - "明亮": ["light"], - "深色": ["dark"], - "黑底": ["dark"], - "暗色": ["dark"], - "多彩": ["colorful"], - "活泼": ["colorful", "casual"], - "正式": ["formal"], - "商务": ["formal"], - "轻松": ["casual"], - "创意": ["creative"], - } - for token in list(tokens): - for keyword, aliases in synonym_tokens.items(): - if keyword in token: - for alias in aliases: - append_unique(tokens, alias) - - unique_tokens: list[str] = [] - for token in tokens or [normalized]: - if token not in unique_tokens: - unique_tokens.append(token) - return unique_tokens - - -def parse_range_spec(range_spec: str) -> list[int]: - if not range_spec or not range_spec.strip(): - fail("range is required") - numbers: set[int] = set() - for part in range_spec.split(","): - trimmed = part.strip() - if not trimmed: - continue - match = re.fullmatch(r"(\d+)(?:-(\d+))?", trimmed) - if not match: - fail(f"invalid range token: {trimmed}") - start = int(match.group(1)) - end = int(match.group(2) or match.group(1)) - if start < 1 or end < start: - fail(f"invalid range token: {trimmed}") - for index in range(start, end + 1): - numbers.add(index) - return sorted(numbers) - - -def compress_numbers(numbers: list[int]) -> str: - if not numbers: - return "" - parts: list[str] = [] - start = numbers[0] - previous = numbers[0] - for current in numbers[1:]: - if current == previous + 1: - previous = current - continue - parts.append(f"{start}" if start == previous else f"{start}-{previous}") - start = current - previous = current - parts.append(f"{start}" if start == previous else f"{start}-{previous}") - return ",".join(parts) - - -def slice_array(items: list[Any], limit: int) -> list[Any]: - return items[: max(limit, 0)] - - -def count_tag(xml: str, tag_name: str) -> int: - return len(re.findall(fr"<{tag_name}\b", xml)) - - -def extract_attribute(tag_source: str, name: str) -> str | None: - match = re.search(fr'{re.escape(name)}="([^"]+)"', tag_source) - return match.group(1) if match else None - - -def extract_numeric_attribute(tag_source: str, name: str) -> int | float | None: - raw = extract_attribute(tag_source, name) - if raw is None: - return None - try: - value = float(raw) - except ValueError: - return None - return int(value) if value.is_integer() else value - - -def sort_regions(regions: list[dict[str, Any]]) -> list[dict[str, Any]]: - return sorted(regions, key=lambda region: (region["y"], region["x"], region["kind"])) - - -def extract_slide_regions(slide_xml: str) -> list[dict[str, Any]]: - regions: list[dict[str, Any]] = [] - for match in re.finditer(r"<shape\b([^>]*)>([\s\S]*?)</shape>", slide_xml): - attrs, content = match.group(1), match.group(2) - x = extract_numeric_attribute(attrs, "topLeftX") - y = extract_numeric_attribute(attrs, "topLeftY") - width = extract_numeric_attribute(attrs, "width") - height = extract_numeric_attribute(attrs, "height") - if all(value is not None for value in [x, y, width, height]): - text_type_match = re.search(r'textType="([^"]+)"', content) - regions.append( - { - "kind": "shape", - "type": extract_attribute(attrs, "type") or "shape", - "text_type": text_type_match.group(1) if text_type_match else None, - "x": x, - "y": y, - "width": width, - "height": height, - "area": width * height, - } - ) - - for match in re.finditer(r"<(img|table|chart)\b([^>]*)/?>", slide_xml): - kind, attrs = match.group(1), match.group(2) - x = extract_numeric_attribute(attrs, "topLeftX") - y = extract_numeric_attribute(attrs, "topLeftY") - width = extract_numeric_attribute(attrs, "width") - height = extract_numeric_attribute(attrs, "height") - if all(value is not None for value in [x, y, width, height]): - regions.append( - { - "kind": kind, - "type": kind, - "text_type": None, - "x": x, - "y": y, - "width": width, - "height": height, - "area": width * height, - } - ) - return sort_regions(regions) - - -def build_bbox_summary( - regions: list[dict[str, Any]], slide_width: int | float | None, slide_height: int | float | None -) -> dict[str, Any]: - if not regions: - return { - "region_count": 0, - "occupied_bounds": None, - "regions": [], - "canvas": compact_object({"width": slide_width, "height": slide_height}), - } - - min_x = regions[0]["x"] - min_y = regions[0]["y"] - max_x = regions[0]["x"] + regions[0]["width"] - max_y = regions[0]["y"] + regions[0]["height"] - for region in regions: - min_x = min(min_x, region["x"]) - min_y = min(min_y, region["y"]) - max_x = max(max_x, region["x"] + region["width"]) - max_y = max(max_y, region["y"] + region["height"]) - - return { - "region_count": len(regions), - "canvas": compact_object({"width": slide_width, "height": slide_height}), - "occupied_bounds": { - "x": min_x, - "y": min_y, - "width": max_x - min_x, - "height": max_y - min_y, - }, - "regions": slice_array( - [ - compact_object( - { - "id": f'{region["kind"]}-{index + 1}', - "kind": region["kind"], - "type": region["type"], - "text_type": region.get("text_type"), - "x": region["x"], - "y": region["y"], - "width": region["width"], - "height": region["height"], - } - ) - for index, region in enumerate(regions) - ], - 8, - ), - } - - -def build_editable_regions(regions: list[dict[str, Any]]) -> list[dict[str, Any]]: - sorted_regions = sorted(regions, key=lambda region: region["area"], reverse=True) - return slice_array( - [ - compact_object( - { - "id": f'{region["kind"]}-{index + 1}', - "kind": region["kind"], - "role": "image" - if region["kind"] == "img" - else region.get("text_type") or region["type"] or region["kind"], - "x": region["x"], - "y": region["y"], - "width": region["width"], - "height": region["height"], - } - ) - for index, region in enumerate(sorted_regions) - ], - 8, - ) - - -def detect_slide_layout_tags( - slide_xml: str, regions: list[dict[str, Any]], slide_width: int | float | None, slide_height: int | float | None -) -> list[str]: - tags: set[str] = set() - text_regions = [region for region in regions if region["kind"] == "shape" and region["type"] == "text"] - image_regions = [region for region in regions if region["kind"] == "img"] - table_regions = [region for region in regions if region["kind"] == "table"] - - if table_regions: - tags.add("comparison-table") - - if "<fillImg" in slide_xml: - tags.add("image-backed") - if text_regions: - tags.add("full-bleed-image-caption") - - if text_regions and len(image_regions) == 1: - biggest_text = sorted(text_regions, key=lambda region: region["area"], reverse=True)[0] - biggest_image = image_regions[0] - if ( - slide_width and biggest_image["width"] >= slide_width * 0.75 - ) or ( - slide_height and biggest_image["height"] >= slide_height * 0.75 - ): - tags.add("full-bleed-image-caption") - elif biggest_text["x"] <= biggest_image["x"]: - tags.add("hero-text-left-image-right") - else: - tags.add("hero-image-left-text-right") - - if len(text_regions) >= 4 and not image_regions: - distinct_x = len({round(region["x"] / 20) for region in text_regions}) - distinct_y = len({round(region["y"] / 20) for region in text_regions}) - if distinct_x >= 2 and distinct_y >= 2: - tags.add("2x2-metric-cards") - - if len(text_regions) >= 2 and not image_regions: - width = slide_width or 960 - left = any(region["x"] < width / 2 - 40 for region in text_regions) - right = any(region["x"] + region["width"] > width / 2 + 40 for region in text_regions) - if left and right: - tags.add("two-column-text") - - if len(text_regions) <= 2 and not image_regions: - top_most = sorted(text_regions, key=lambda region: region["y"])[0] if text_regions else None - if top_most and top_most["y"] <= 120 and top_most["height"] <= 140: - tags.add("section-divider") - - if not tags and text_regions: - tags.add("text-focused") - - return sorted(tags) - - -def parse_theme_summary(theme_xml: str | None) -> dict[str, Any]: - if not theme_xml: - return {"has_theme_node": False, "text_styles": []} - - text_styles_block = re.search(r"<textStyles>([\s\S]*?)</textStyles>", theme_xml) - text_styles: list[dict[str, Any]] = [] - if text_styles_block: - for match in re.finditer(r"<(title|headline|sub-headline|body|caption)\b([^>]*)/?>", text_styles_block.group(1)): - text_styles.append( - compact_object( - { - "text_type": match.group(1), - "font_color": extract_attribute(match.group(2), "fontColor"), - "font_size": extract_attribute(match.group(2), "fontSize"), - "font_family": extract_attribute(match.group(2), "fontFamily"), - } - ) - ) - return {"has_theme_node": True, "text_styles": text_styles} - - -def extract_background_hint(slide_xml: str) -> str | None: - fill_color_match = re.search(r'<fillColor color="([^"]+)"', slide_xml) - if fill_color_match: - return fill_color_match.group(1) - fill_img_match = re.search(r'<fillImg src="([^"]+)"', slide_xml) - if fill_img_match: - return f"fillImg:{fill_img_match.group(1)}" - return None - - -def extract_title_hint(slide_xml: str) -> dict[str, str] | None: - type_priority = {"title": 5, "headline": 4, "sub-headline": 3, "body": 2, "caption": 1} - content_pattern = re.compile( - r'<content\b([^>]*)textType="(title|headline|sub-headline|body|caption)"([^>]*)>([\s\S]*?)</content>' - ) - candidates: list[dict[str, Any]] = [] - for match in content_pattern.finditer(slide_xml): - attrs = f"{match.group(1)} {match.group(3)}" - text = strip_xml(match.group(4)) - if text: - candidates.append( - { - "text_type": match.group(2), - "text": text[:80], - "font_size": int(extract_attribute(attrs, "fontSize") or "0"), - "priority": type_priority.get(match.group(2), 0), - } - ) - candidates.sort(key=lambda item: (-item["priority"], -item["font_size"], -len(item["text"]))) - if candidates: - return {"text_type": candidates[0]["text_type"], "text": candidates[0]["text"]} - return None - - -def summarize_slide(slide_xml: str, slide_number: int, presentation_info: dict[str, Any] | None = None) -> dict[str, Any]: - presentation_info = presentation_info or {} - raw_width = presentation_info.get("width") - raw_height = presentation_info.get("height") - slide_width = int(float(raw_width)) if raw_width else None - slide_height = int(float(raw_height)) if raw_height else None - regions = extract_slide_regions(slide_xml) - return { - "slide_number": slide_number, - "title_hint": extract_title_hint(slide_xml), - "background_hint": extract_background_hint(slide_xml), - "layout_tags": detect_slide_layout_tags(slide_xml, regions, slide_width, slide_height), - "bbox_summary": build_bbox_summary(regions, slide_width, slide_height), - "editable_regions": build_editable_regions(regions), - "element_counts": { - "shape": count_tag(slide_xml, "shape"), - "img": count_tag(slide_xml, "img"), - "table": count_tag(slide_xml, "table"), - "chart": count_tag(slide_xml, "chart"), - "icon": count_tag(slide_xml, "icon"), - "line": count_tag(slide_xml, "line"), - "polyline": count_tag(slide_xml, "polyline"), - }, - } - - -def aggregate_slides(slide_summaries: list[dict[str, Any]]) -> dict[str, Any]: - totals = {"shape": 0, "img": 0, "table": 0, "chart": 0, "icon": 0, "line": 0, "polyline": 0} - title_hints: list[str] = [] - background_hints: list[str] = [] - layout_tags: list[str] = [] - for slide in slide_summaries: - for key, value in slide["element_counts"].items(): - totals[key] += value - if slide.get("title_hint") and slide["title_hint"]["text"] not in title_hints: - title_hints.append(slide["title_hint"]["text"]) - if slide.get("background_hint") and slide["background_hint"] not in background_hints: - background_hints.append(slide["background_hint"]) - for tag in slide.get("layout_tags") or []: - if tag not in layout_tags: - layout_tags.append(tag) - return { - "slide_count": len(slide_summaries), - "title_hints": slice_array(title_hints, 4), - "background_hints": slice_array(background_hints, 4), - "layout_tags": layout_tags, - "element_totals": totals, - } - - -def parse_template_xml(template_path: str | Path) -> dict[str, Any]: - xml = read_file(template_path) - presentation_match = re.search(r"<presentation\b([^>]*)>", xml) - if not presentation_match: - fail(f"template missing presentation root: {template_path}") - opening_tag = presentation_match.group(0) - title_xml_match = re.search(r"<title>[\s\S]*?", xml) - theme_xml_match = re.search(r"[\s\S]*?", xml) - slides = re.findall(r"", xml) - slide_summaries = [ - summarize_slide( - slide_xml, - index + 1, - { - "width": extract_attribute(presentation_match.group(1), "width"), - "height": extract_attribute(presentation_match.group(1), "height"), - }, - ) - for index, slide_xml in enumerate(slides) - ] - return { - "xml": xml, - "opening_tag": opening_tag, - "width": extract_attribute(presentation_match.group(1), "width"), - "height": extract_attribute(presentation_match.group(1), "height"), - "title_xml": title_xml_match.group(0) if title_xml_match else None, - "title_text": strip_xml(title_xml_match.group(0)) if title_xml_match else None, - "theme_xml": theme_xml_match.group(0) if theme_xml_match else None, - "theme_summary": parse_theme_summary(theme_xml_match.group(0) if theme_xml_match else None), - "slides": slides, - "slide_summaries": slide_summaries, - } - - -def finalize_catalog_entry(entry: dict[str, Any] | None) -> dict[str, Any] | None: - if not entry: - return None - filename_stem = re.sub(r"\.xml$", "", entry["filename"]) - template_id = f'{entry["category"]}--{filename_stem}' - return { - "template_id": template_id, - "filename": f"{template_id}.xml", - "category": entry["category"], - "category_label": entry["category_label"], - "scene": entry["scene"], - "is_general_template": entry["is_general_template"], - "catalog_slide_count": entry["catalog_slide_count"], - "tone": entry["tone"], - "formality": entry["formality"], - "palette": entry["palette"], - "structure": entry["structure"], - "page_types": entry["page_types"], - "use_cases": entry["use_cases"], - "ranges": entry["ranges"], - } - - -def parse_catalog(catalog_path: str | Path = CATALOG_PATH) -> list[dict[str, Any]]: - lines = read_file(catalog_path).splitlines() - entries: list[dict[str, Any]] = [] - current_category: str | None = None - current_category_label: str | None = None - current_entry: dict[str, Any] | None = None - - def push_current() -> None: - nonlocal current_entry - finalized = finalize_catalog_entry(current_entry) - if finalized: - entries.append(finalized) - current_entry = None - - for raw_line in lines: - line = raw_line.rstrip() - if line.startswith("## 快速匹配索引"): - break - - category_match = re.match(r"^##\s+([a-z]+)\s+—\s+(.+)$", line) - if category_match: - push_current() - current_category = category_match.group(1) - current_category_label = category_match.group(2).strip() - continue - - template_match = re.match(r"^###\s+(⭐\s+)?([^ ]+\.xml)\s+—\s+(.+)$", line) - if template_match: - push_current() - current_entry = { - "category": current_category, - "category_label": current_category_label, - "filename": template_match.group(2).strip(), - "scene": template_match.group(3).strip(), - "is_general_template": bool(template_match.group(1)), - "catalog_slide_count": None, - "tone": None, - "formality": None, - "palette": None, - "structure": None, - "page_types": None, - "use_cases": None, - "ranges": [], - } - continue - - if not current_entry: - continue - - plain = strip_markdown(line) - slide_count_match = re.search(r"(\d+)\s*页", plain) - if slide_count_match: - current_entry["catalog_slide_count"] = int(slide_count_match.group(1)) - - tone_match = re.search(r"色调:([^|]+)\|\s*正式度:(.+)$", plain) - if tone_match: - current_entry["tone"] = tone_match.group(1).strip() - current_entry["formality"] = tone_match.group(2).strip() - continue - - if plain.startswith("配色:"): - current_entry["palette"] = plain[len("配色:") :].strip() - continue - - if plain.startswith("结构:"): - current_entry["structure"] = plain[len("结构:") :].strip() - continue - - if plain.startswith("页面类型:"): - current_entry["page_types"] = plain[len("页面类型:") :].strip() - continue - - if plain.startswith("页型索引"): - _, _, ranges_raw = plain.partition(":") - ranges: list[dict[str, Any]] = [] - for item in [part.strip() for part in ranges_raw.split("|") if part.strip()]: - match = re.match(r"^(.+?)\s+([0-9,\-\s无]+)$", item) - if not match: - ranges.append({"label": item, "range": "", "slide_numbers": []}) - continue - range_text = normalize_whitespace(match.group(2)) - range_text = "" if range_text == "无" else range_text - ranges.append( - { - "label": match.group(1).strip(), - "range": range_text, - "slide_numbers": parse_range_spec(range_text) if range_text else [], - } - ) - current_entry["ranges"] = ranges - continue - - if plain.startswith("适用:"): - current_entry["use_cases"] = plain[len("适用:") :].strip() - - push_current() - return entries - - -def build_search_text(entry: dict[str, Any]) -> str: - values: list[str] = [ - entry.get("template_id"), - entry.get("category"), - entry.get("category_label"), - entry.get("scene"), - entry.get("tone"), - entry.get("formality"), - entry.get("palette"), - entry.get("structure"), - entry.get("page_types"), - *(entry.get("layout_tags") or []), - entry.get("use_cases"), - *[f'{entry_range["label"]} {entry_range["range"]}' for entry_range in entry.get("ranges", [])], - ] - return " ".join(str(value) for value in values if value).lower() - - -def build_index_data() -> dict[str, Any]: - catalog_entries = parse_catalog() - templates: list[dict[str, Any]] = [] - for entry in catalog_entries: - template_path = TEMPLATES_DIR / entry["filename"] - xml_info = parse_template_xml(template_path) - layout_tags = sorted({tag for slide in xml_info["slide_summaries"] for tag in slide.get("layout_tags", [])}) - templates.append( - { - "template_id": entry["template_id"], - "category": entry["category"], - "category_label": entry["category_label"], - "scene": entry["scene"], - "tone": entry["tone"], - "formality": entry["formality"], - "is_general_template": entry["is_general_template"], - "slide_count": len(xml_info["slides"]), - "presentation_title": xml_info["title_text"], - "palette": entry["palette"], - "structure": entry["structure"], - "page_types": entry["page_types"], - "layout_tags": layout_tags, - "use_cases": entry["use_cases"], - "ranges": [{"label": entry_range["label"], "range": entry_range["range"]} for entry_range in entry["ranges"]], - } - ) - - return { - "schema_version": LIGHTWEIGHT_INDEX_SCHEMA_VERSION, - "generated_at": datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z"), - "template_count": len(templates), - "templates": templates, - } - - -def load_index(index_path: str | Path = DEFAULT_INDEX_PATH) -> dict[str, Any]: - index_path = Path(index_path) - if index_path.exists(): - existing = json.loads(read_file(index_path)) - first_template = existing.get("templates", [None])[0] if existing.get("templates") else None - if first_template and first_template.get("layout_tags") and "bbox_summary" not in first_template: - return existing - return build_index_data() - - -def catalog_filename(entry: dict[str, Any]) -> str: - return f'{entry["template_id"].split("--", 1)[-1]}.xml' - - -def build_external_template_entry(template_path: Path) -> dict[str, Any]: - xml_info = parse_template_xml(template_path) - return { - "template_id": template_path.stem, - "scene": None, - "tone": None, - "formality": None, - "slide_count": len(xml_info["slides"]), - "presentation_title": xml_info["title_text"], - "palette": None, - "structure": None, - "page_types": [], - "layout_tags": sorted( - {tag for slide in xml_info["slide_summaries"] for tag in slide.get("layout_tags", [])} - ), - "use_cases": None, - "theme_summary": xml_info["theme_summary"], - "ranges": [], - } - - -def find_template_entry( - index_data: dict[str, Any], - selector: str, - *, - fail_on_ambiguous: bool = True, -) -> dict[str, Any] | None: - normalized = re.sub(r"\.xml$", "", selector) - matches = [ - entry - for entry in index_data["templates"] - if entry["template_id"] == normalized - or f'{entry["template_id"]}.xml' == selector - or catalog_filename(entry) == selector - or catalog_filename(entry) == f"{normalized}.xml" - ] - if len(matches) > 1 and fail_on_ambiguous: - template_ids = ", ".join(entry["template_id"] for entry in matches) - fail(f"template selector is ambiguous: {selector}; use one of: {template_ids}") - if len(matches) > 1: - return None - return matches[0] if matches else None - - -def resolve_template_reference(index_data: dict[str, Any], template_selector: str) -> dict[str, Any]: - if not template_selector: - fail("template selector is required") - - input_path = Path(template_selector) - as_path = input_path - if not input_path.is_absolute(): - as_path = (Path.cwd() / as_path).resolve() - if as_path.exists(): - entry = find_template_entry( - index_data, - as_path.name, - fail_on_ambiguous=False, - ) or build_external_template_entry(as_path) - return {"entry": entry, "path": as_path} - if input_path.is_absolute() or input_path.parent != Path("."): - fail(f"template not found: {template_selector}") - - selector_name = Path(template_selector).name - entry = find_template_entry(index_data, selector_name) - if entry: - return {"entry": entry, "path": get_template_path(entry)} - - fail(f"template not found: {template_selector}") - - -def resolve_template_entry(index_data: dict[str, Any], template_selector: str) -> dict[str, Any]: - return resolve_template_reference(index_data, template_selector)["entry"] - - -def resolve_range_selection(entry: dict[str, Any], options: dict[str, Any]) -> dict[str, Any]: - if options.get("label"): - matched_range = next((item for item in entry["ranges"] if item["label"] == options["label"]), None) - if not matched_range: - fail(f'range label not found: {options["label"]}') - slide_numbers = parse_range_spec(matched_range["range"]) if matched_range["range"] else [] - if not slide_numbers: - fail(f'range label has no slides: {options["label"]}') - return {"label": matched_range["label"], "range": matched_range["range"], "slide_numbers": slide_numbers} - - if not options.get("range"): - fail("either --range or --label is required") - slide_numbers = parse_range_spec(options["range"]) - return {"label": None, "range": compress_numbers(slide_numbers), "slide_numbers": slide_numbers} - - -def get_template_path(entry: dict[str, Any]) -> Path: - return TEMPLATES_DIR / f'{entry["template_id"]}.xml' - - -def summarize_selection(index_data: dict[str, Any], template_selector: str, options: dict[str, Any]) -> dict[str, Any]: - reference = resolve_template_reference(index_data, template_selector) - entry = reference["entry"] - selection = resolve_range_selection(entry, options) - xml_info = parse_template_xml(reference["path"]) - slide_summaries = [ - xml_info["slide_summaries"][slide_number - 1] - for slide_number in selection["slide_numbers"] - if 0 < slide_number <= len(xml_info["slide_summaries"]) - ] - return { - "template": { - "template_id": entry["template_id"], - "scene": entry["scene"], - "tone": entry["tone"], - "formality": entry["formality"], - "slide_count": len(xml_info["slides"]), - "presentation_title": xml_info["title_text"], - "palette": entry["palette"], - "structure": entry["structure"], - "page_types": entry["page_types"], - "layout_tags": sorted({tag for slide in xml_info["slide_summaries"] for tag in slide.get("layout_tags", [])}), - "use_cases": entry["use_cases"], - }, - "selection": selection, - "theme_summary": xml_info["theme_summary"], - "summary": aggregate_slides(slide_summaries), - "slides": slide_summaries, - } - - -def extract_selection_xml(index_data: dict[str, Any], template_selector: str, options: dict[str, Any]) -> str: - reference = resolve_template_reference(index_data, template_selector) - entry = reference["entry"] - selection = resolve_range_selection(entry, options) - xml_info = parse_template_xml(reference["path"]) - selected_slides: list[str] = [] - for slide_number in selection["slide_numbers"]: - if slide_number - 1 >= len(xml_info["slides"]) or slide_number <= 0: - fail(f"slide {slide_number} is out of range for {entry['template_id']}") - selected_slides.append(xml_info["slides"][slide_number - 1]) - - chunks = [xml_info["opening_tag"]] - if xml_info["title_xml"]: - chunks.append(f' {xml_info["title_xml"]}') - if xml_info["theme_xml"]: - chunks.append(f' {xml_info["theme_xml"]}') - chunks.extend(selected_slides) - chunks.append("") - return "\n".join(chunks) - - -def search_templates(index_data: dict[str, Any], options: dict[str, Any]) -> list[dict[str, Any]]: - query = options.get("query", "") or "" - tokens = tokenize_query(query) - tone = options.get("tone") - formality = options.get("formality") - category = options.get("category") - layout_tag = options.get("layoutTag") or options.get("layout-tag") - limit = int(options.get("limit", 5)) - - ranked: list[dict[str, Any]] = [] - for entry in index_data["templates"]: - if tone and entry["tone"] != tone: - continue - if formality and entry["formality"] != formality: - continue - if category and entry["category"] != category: - continue - if layout_tag and layout_tag not in (entry.get("layout_tags") or []): - continue - - score = 0 - if not query: - score = 1 - else: - search_text = build_search_text(entry) - exact_id = entry["template_id"].lower() == query.lower() - if exact_id: - score += 100 - for token in tokens: - if token in search_text: - score += len(token) * 10 if re.search(r"[\u3400-\u9fff]", token) else len(token) * 6 - if entry.get("scene") and token in entry["scene"]: - score += 12 - if entry.get("use_cases") and token in entry["use_cases"]: - score += 8 - if entry.get("scene") and query in entry["scene"]: - score += 40 - if entry.get("use_cases") and query in entry["use_cases"]: - score += 30 - if score == 0: - continue - - if entry.get("is_general_template"): - score -= 5 - ranked.append( - { - "template_id": entry["template_id"], - "scene": entry["scene"], - "tone": entry["tone"], - "formality": entry["formality"], - "is_general_template": entry["is_general_template"], - "use_cases": entry["use_cases"], - "layout_tags": entry.get("layout_tags") or [], - "slide_count": entry["slide_count"], - "ranges": entry["ranges"], - "score": score, - } - ) - - ranked.sort(key=lambda item: (-item["score"], item["template_id"])) - return ranked[:limit] - - -def parse_cli_args(argv: list[str]) -> tuple[str | None, dict[str, Any]]: - if not argv: - return None, {} - command, *rest = argv - options: dict[str, Any] = {} - index = 0 - while index < len(rest): - token = rest[index] - if not token.startswith("--"): - fail(f"unexpected argument: {token}") - key = token[2:] - next_token = rest[index + 1] if index + 1 < len(rest) else None - if next_token is None or next_token.startswith("--"): - options[key] = True - index += 1 - continue - options[key] = next_token - index += 2 - return command, options - - -def print_usage() -> None: - usage = [ - "Usage:", - " python3 template_tool.py build-index [--out ]", - " python3 template_tool.py search --query [--tone light|dark|colorful] [--formality formal|casual|creative] [--layout-tag ] [--limit 3]", - " python3 template_tool.py summarize --template (--range 1-2,5 | --label 封面)", - " python3 template_tool.py extract --template (--range 1-2,5 | --label 封面) [--with-summary] [--out ]", - ] - print("\n".join(usage), file=sys.stderr) - - -def write_json(value: Any) -> None: - print(json.dumps(value, ensure_ascii=False, indent=2)) - - -def run_cli(argv: list[str] | None = None) -> None: - command, options = parse_cli_args(argv or sys.argv[1:]) - if not command or command in {"--help", "help"}: - print_usage() - raise SystemExit(0) - - if command == "build-index": - index_data = build_index_data() - output_path = Path(options["out"]).resolve() if options.get("out") else DEFAULT_INDEX_PATH - output_path.write_text(f'{json.dumps(index_data, ensure_ascii=False, indent=2)}\n', encoding="utf-8") - print(output_path) - return - - if command == "search": - write_json(search_templates(load_index(), options)) - return - - if command == "summarize": - write_json(summarize_selection(load_index(), options.get("template"), options)) - return - - if command == "extract": - index_data = load_index() - xml = extract_selection_xml(index_data, options.get("template"), options) - if options.get("with-summary"): - summary = summarize_selection(index_data, options.get("template"), options) - write_json({"xml": xml, "selection": summary["selection"], "summary": summary["summary"], "slides": summary["slides"]}) - return - if options.get("out"): - output_path = Path(options["out"]).resolve() - output_path.write_text(f"{xml}\n", encoding="utf-8") - print(output_path) - return - sys.stdout.write(f"{xml}\n") - return - - print_usage() - fail(f"unknown command: {command}") - - -if __name__ == "__main__": - try: - run_cli() - except TemplateToolError as error: - print(f"template-tool error: {error}", file=sys.stderr) - raise SystemExit(1) from error diff --git a/skills/lark-slides/scripts/template_tool_test.py b/skills/lark-slides/scripts/template_tool_test.py deleted file mode 100644 index def3b5ae3..000000000 --- a/skills/lark-slides/scripts/template_tool_test.py +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright (c) 2026 Lark Technologies Pte. Ltd. -# SPDX-License-Identifier: MIT -from __future__ import annotations - -import tempfile -import unittest -from pathlib import Path - -import template_tool - - -class TemplateToolTest(unittest.TestCase): - @classmethod - def setUpClass(cls) -> None: - cls.index_data = template_tool.build_index_data() - - def test_build_index_data_exposes_light_general_metadata(self) -> None: - template = next( - entry for entry in self.index_data["templates"] if entry["template_id"] == "office--light_general" - ) - expected_keys = { - "template_id", - "category", - "category_label", - "scene", - "tone", - "formality", - "is_general_template", - "slide_count", - "presentation_title", - "palette", - "structure", - "page_types", - "layout_tags", - "use_cases", - "ranges", - } - self.assertEqual(set(template.keys()), expected_keys) - self.assertEqual(template["tone"], "light") - self.assertEqual(template["formality"], "formal") - self.assertEqual(template["slide_count"], 54) - self.assertEqual(template["presentation_title"], "白底通用模板") - self.assertIsInstance(template["layout_tags"], list) - self.assertNotIn("theme_summary", template) - self.assertNotIn("editable_regions", template) - self.assertNotIn("bbox_summary", template) - - def test_search_templates_keeps_work_report_templates_in_top_results(self) -> None: - results = template_tool.search_templates(self.index_data, {"query": "工作汇报", "limit": 3}) - self.assertTrue(results) - self.assertTrue(any(entry["template_id"] == "office--work_report" for entry in results)) - - def test_search_templates_extracts_scene_from_long_chinese_prompt(self) -> None: - results = template_tool.search_templates( - self.index_data, - {"query": "帮我做一个季度工作汇报PPT,偏正式", "limit": 3}, - ) - self.assertTrue(results) - self.assertTrue(any(entry["template_id"] == "office--work_report" for entry in results)) - - def test_search_templates_maps_chinese_tone_words(self) -> None: - results = template_tool.search_templates( - self.index_data, - {"query": "深色科技感产品发布", "limit": 5}, - ) - self.assertTrue(results) - self.assertTrue(any(entry["tone"] == "dark" for entry in results)) - - def test_search_templates_finds_product_launch_and_promotion_defense(self) -> None: - product_results = template_tool.search_templates( - self.index_data, - {"query": "产品发布会新品介绍", "limit": 5}, - ) - self.assertTrue(product_results) - self.assertTrue( - any( - entry["template_id"] - in {"office--project_kickoff", "product--product_intro", "product--product_promotion"} - for entry in product_results - ) - ) - - defense_results = template_tool.search_templates( - self.index_data, - {"query": "晋升答辩 个人述职", "limit": 5}, - ) - self.assertTrue(defense_results) - self.assertTrue(any(entry["template_id"] == "personal--promotion_defense" for entry in defense_results)) - - def test_extract_selection_xml_keeps_only_requested_slides_and_theme(self) -> None: - xml = template_tool.extract_selection_xml(self.index_data, "office--light_general", {"label": "封面"}) - self.assertEqual(len(template_tool.re.findall(r"", xml) - self.assertIn("白底通用模板", xml) - - def test_summarize_selection_aggregates_slide_titles_and_counts(self) -> None: - summary = template_tool.summarize_selection(self.index_data, "office--light_general", {"label": "封面"}) - self.assertEqual(summary["selection"]["range"], "1-2") - self.assertEqual(summary["summary"]["slide_count"], 2) - self.assertTrue(summary["theme_summary"]["has_theme_node"]) - self.assertIn("通用模板", summary["summary"]["title_hints"]) - self.assertGreater(summary["summary"]["element_totals"]["shape"], 0) - self.assertIsInstance(summary["slides"][0]["layout_tags"], list) - self.assertIn("bbox_summary", summary["slides"][0]) - self.assertIn("editable_regions", summary["slides"][0]) - - def test_template_selector_accepts_catalog_visible_filename(self) -> None: - entry = template_tool.resolve_template_entry(self.index_data, "work_report.xml") - self.assertEqual(entry["template_id"], "office--work_report") - - def test_template_path_uses_user_supplied_file(self) -> None: - source_path = template_tool.TEMPLATES_DIR / "office--work_report.xml" - with tempfile.TemporaryDirectory() as temp_dir: - copied_path = Path(temp_dir) / "work_report.xml" - copied_path.write_text( - source_path.read_text(encoding="utf-8").replace( - "工作汇报", - "Copied Path Template", - 1, - ), - encoding="utf-8", - ) - - xml = template_tool.extract_selection_xml( - self.index_data, - str(copied_path), - {"range": "1"}, - ) - - self.assertIn("Copied Path Template", xml) - - def test_template_path_accepts_unindexed_xml_with_range(self) -> None: - xml = ( - '' - "Generated Template" - "" - "" - ) - with tempfile.TemporaryDirectory() as temp_dir: - template_path = Path(temp_dir) / "generated.xml" - template_path.write_text(xml, encoding="utf-8") - - extracted = template_tool.extract_selection_xml( - self.index_data, - str(template_path), - {"range": "1"}, - ) - - self.assertIn("Generated Template", extracted) - - def test_search_templates_supports_layout_tag_filtering(self) -> None: - results = template_tool.search_templates( - self.index_data, - {"query": "", "layout-tag": "full-bleed-image-caption", "limit": 10}, - ) - self.assertTrue(results) - self.assertTrue( - any("full-bleed-image-caption" in entry["layout_tags"] for entry in results) - ) - - def test_all_template_files_are_cataloged_and_indexed(self) -> None: - template_files = sorted(path.stem for path in template_tool.TEMPLATES_DIR.glob("*.xml")) - indexed_templates = sorted(entry["template_id"] for entry in self.index_data["templates"]) - self.assertEqual(indexed_templates, template_files) - self.assertEqual(self.index_data["template_count"], len(template_files)) - self.assertTrue(template_files) - - def test_catalog_range_parser_keeps_comma_separated_ranges(self) -> None: - template = next( - entry for entry in self.index_data["templates"] if entry["template_id"] == "operations--product_promotion" - ) - content_range = next(item for item in template["ranges"] if item["label"] == "内容") - self.assertEqual(content_range["range"], "3-8, 10-12") - - -if __name__ == "__main__": - unittest.main() diff --git a/skills/lark-slides/scripts/xml_text_overlap_lint_test.py b/skills/lark-slides/scripts/xml_text_overlap_lint_test.py index 691143473..cace60cd7 100644 --- a/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +++ b/skills/lark-slides/scripts/xml_text_overlap_lint_test.py @@ -3,16 +3,12 @@ from __future__ import annotations import unittest -from pathlib import Path import xml_text_overlap_lint -TEMPLATES_DIR = Path(__file__).resolve().parents[1] / "assets" / "templates" - - class XmlTextOverlapLintTest(unittest.TestCase): - def assertNoXmlTextOverlapLintIssues(self, result: dict, template_path: Path) -> None: + def assertNoXmlTextOverlapLintIssues(self, result: dict, sample_name: str) -> None: issue_summaries = [] for slide in result.get("slides", []): for issue in slide.get("issues", []): @@ -25,24 +21,64 @@ class XmlTextOverlapLintTest(unittest.TestCase): self.assertEqual( result["summary"]["error_count"], 0, - f"{template_path.name} has XML text overlap lint errors:\n" + "\n".join(issue_summaries), + f"{sample_name} has XML text overlap lint errors:\n" + "\n".join(issue_summaries), ) self.assertEqual( result["summary"]["warning_count"], 0, - f"{template_path.name} has XML text overlap lint warnings:\n" + "\n".join(issue_summaries), + f"{sample_name} has XML text overlap lint warnings:\n" + "\n".join(issue_summaries), ) - def test_xml_text_overlap_lint_accepts_all_template_xml_files(self) -> None: - template_paths = sorted(TEMPLATES_DIR.glob("*.xml")) - self.assertTrue(template_paths) - for template_path in template_paths: - with self.subTest(template=template_path.name): + def test_xml_text_overlap_lint_accepts_inline_fixture_xml_samples(self) -> None: + samples = { + "image-led-cover": """ + + + + + + +

Quarterly Review

+
+ +

Focus, progress, and next steps

+
+
+
+
+ """, + "content-grid": """ + + + + +

Execution Snapshot

+
+ + +

Plan

+
+ + +

Build

+
+ + +

Launch

+
+
+
+
+ """, + } + self.assertTrue(samples) + for sample_name, sample_xml in samples.items(): + with self.subTest(sample=sample_name): result = xml_text_overlap_lint.lint_xml( - template_path.read_text(encoding="utf-8"), - str(template_path), + sample_xml, + sample_name, ) - self.assertNoXmlTextOverlapLintIssues(result, template_path) + self.assertNoXmlTextOverlapLintIssues(result, sample_name) def test_lint_xml_reports_unescaped_ampersand_in_text(self) -> None: result = xml_text_overlap_lint.lint_xml( diff --git a/skills/lark-task/references/lark-task-create.md b/skills/lark-task/references/lark-task-create.md index 7c946df4d..f8bb5fc23 100644 --- a/skills/lark-task/references/lark-task-create.md +++ b/skills/lark-task/references/lark-task-create.md @@ -46,7 +46,20 @@ lark-cli task +create --summary "Test Task" --dry-run 1. Confirm with the user: task summary, due date, assignee, and tasklist if necessary. - **Crucial Rule for Assignee**: If the user explicitly or implicitly says "create a task for me" (给我创建一个任务), or "help me create a task" (帮我新建/创建一个任务), you MUST assign the task to the current logged-in user. You can get the current user's `open_id` by executing `lark-cli auth status` (it already outputs JSON by default, so do not add `--json`) or `lark-cli contact +get-user` first, extracting `.identities.user.openId` (from `auth status`) or `.data.user.open_id` (from `contact +get-user`), and then passing it to the `--assignee` parameter. 2. Execute `lark-cli task +create --summary "..." ...` -3. Report the result: task ID and summary. +3. Judge success by `ok == true` in the stdout JSON (the success envelope has no `code` field — do not test `code == 0`), then report the result: task ID (`data.guid`) and summary. + +Example success response: + +```json +{ + "ok": true, + "identity": "user", + "data": { + "guid": "e297d3d0-4b60-4a5f-a4d4-xxxxxxxxxxxx", + "url": "https://applink.larkoffice.com/client/todo/detail?guid=e297d3d0-4b60-4a5f-a4d4-xxxxxxxxxxxx" + } +} +``` > [!CAUTION] > This is a **Write Operation** -- You must confirm the user's intent before executing. diff --git a/skills/lark-vc/references/lark-vc-recording.md b/skills/lark-vc/references/lark-vc-recording.md index 5f52e2480..1d6d58ee1 100644 --- a/skills/lark-vc/references/lark-vc-recording.md +++ b/skills/lark-vc/references/lark-vc-recording.md @@ -1,7 +1,6 @@ # vc +recording -> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。 通过 meeting_id 或 calendar_event_id 查询对应的 minute_token。这是 VC 域和 Minutes 域之间的桥梁命令。只读操作。 @@ -151,4 +150,3 @@ lark-cli minutes +download --minute-tokens - [lark-vc](../SKILL.md) — 视频会议全部命令 - [lark-vc-search](lark-vc-search.md) — 搜索历史会议(获取 meeting_id) - [lark-minutes-detail](../../lark-minutes/references/lark-minutes-detail.md) — 获取会议纪要 -- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数 diff --git a/skills/lark-wiki/SKILL.md b/skills/lark-wiki/SKILL.md index efe7c3075..52cfaeaab 100644 --- a/skills/lark-wiki/SKILL.md +++ b/skills/lark-wiki/SKILL.md @@ -1,6 +1,6 @@ --- name: lark-wiki -version: 1.0.1 +version: 1.0.2 description: "飞书知识库:管理知识空间、空间成员和文档节点。创建和查询知识空间、查看和管理空间成员、管理节点层级结构、在知识库中组织文档和快捷方式。当用户需要在知识库中查找或创建文档、浏览知识空间结构、查看或管理空间成员、移动或复制节点时使用。当用户给出 doubao.com 的 /wiki/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。不负责:上传文件到知识库节点下(走 lark-drive)、编辑文档/表格/Base 内容(走 lark-doc / lark-sheets / lark-base)。" metadata: requires: @@ -34,6 +34,8 @@ metadata: - 用户明确选定后再执行 `lark-cli wiki +delete-space --space-id --yes`(高风险写操作,必须显式 `--yes`)。 - 反例:不要把 wiki URL / 名称直接当 `--space-id`(如 `--space-id "https://.../wiki/"`);务必先用 `wiki spaces get_node` 解析出 `data.node.space_id` 再传。 - 用户要在知识库中创建新节点,优先使用 `lark-cli wiki +node-create`。 +- 用户要列出 Wiki 节点:先用 `wiki +space-list --as user` 拿数字 `space_id`,再用 `wiki +node-list --space-id `。不要把 wiki URL、node token、doc token、名称直接当 `--space-id`。钻子节点时 `--parent-node-token` 必须是 wiki node token;如果用户给的是 docx/sheet/base URL,先用 `wiki +node-get --node-token ` 解析出 `node_token`。 +- `wiki +node-list` 命中 `invalid_parameters`、`not_found`、`permission_denied` 时,不要重复调用同一参数;按 hint 修 `space_id` / `parent_node_token` / 权限。只有 `rate_limit` 才做退避重试。 - 用户说“给知识库添加成员/管理员”:先把目标解析成“用户 / 群 / 部门 / 应用”四类之一,再决定 `--member-type`,不要先调 `wiki +member-add` 再根据报错反推类型。 - 用户说“部门 + bot”:这是已知不支持路径。不要继续尝试 `wiki +member-add --as bot`;直接提示必须改成 `--as user`,或明确告知当前要求无法完成。 - 用户说“用户 / 群 / 应用 + 添加成员”:先解析对应 ID,再执行 `wiki +member-add`。 diff --git a/skills/lark-wiki/references/lark-wiki-node-get.md b/skills/lark-wiki/references/lark-wiki-node-get.md index 3db7c329c..6e6c59d96 100644 --- a/skills/lark-wiki/references/lark-wiki-node-get.md +++ b/skills/lark-wiki/references/lark-wiki-node-get.md @@ -19,7 +19,7 @@ lark-cli wiki +node-get \ |------|------|----------|---------|-------------| | `--node-token` | string | **Yes** | — | `node_token`, cloud-doc `obj_token`, or a Lark URL embedding one (e.g. `https://feishu.cn/wiki/` or `https://feishu.cn/docx/`). Matches the `--node-token` naming used by sibling `+node-delete` / `+node-copy` / `+move`. | | `--token` | string | — (deprecated) | — | Deprecated original name; still accepted for backward compatibility but emits a `Flag --token has been deprecated, use --node-token instead` warning on stderr. New scripts should use `--node-token`. | -| `--obj-type` | enum | No | — | Needed when `--node-token` is a raw `obj_token`; auto-inferred from the URL path. Not allowed when the token looks like a `node_token` (`wik...`) | +| `--obj-type` | enum | No | — | Needed when `--node-token` is a raw `obj_token`; auto-inferred from typed Lark URLs. If omitted for a raw token, the shortcut treats it as a wiki `node_token`. | | `--space-id` | string | No | — | Optional cross-check: fail if the resolved node does not live in this space | | `--format` | enum | No | `json` | `json` / `pretty` / `table` / `csv` / `ndjson` | | `--as` | enum | No | `auto` | Identity `user`/`bot`; wiki is user-centric → pass `--as user` | diff --git a/skills/lark-wiki/references/lark-wiki-node-list.md b/skills/lark-wiki/references/lark-wiki-node-list.md index 862cfa1e6..0036a7ded 100644 --- a/skills/lark-wiki/references/lark-wiki-node-list.md +++ b/skills/lark-wiki/references/lark-wiki-node-list.md @@ -11,6 +11,9 @@ lark-cli wiki +node-list --space-id # Drill into a sub-directory (still single page by default) lark-cli wiki +node-list --space-id --parent-node-token +# Drill with a wiki URL (CLI normalizes /wiki/ to node_token) +lark-cli wiki +node-list --space-id --parent-node-token "https://feishu.cn/wiki/wikcn_xxx" + # Personal document library (user identity only) lark-cli wiki +node-list --space-id my_library --as user @@ -31,8 +34,8 @@ lark-cli wiki +node-list --space-id --format pretty | Flag | Type | Required | Default | Description | |------|------|----------|---------|-------------| -| `--space-id` | string | **Yes** | — | Wiki space ID. Use `my_library` for personal document library (user only) | -| `--parent-node-token` | string | No | — | Parent node token; omit to list the space root | +| `--space-id` | string | **Yes** | — | Numeric wiki space ID. Use `my_library` for personal document library (user only) | +| `--parent-node-token` | string | No | — | Parent wiki node token, or a `/wiki/` URL; omit to list the space root | | `--page-size` | int | No | 50 | Page size, 1-50 | | `--page-token` | string | No | — | Page cursor; implies single-page fetch (no auto-pagination) | | `--page-all` | bool | No | `false` | Automatically paginate through all pages (capped by `--page-limit`) | @@ -82,6 +85,10 @@ lark-cli wiki +node-list --space-id 6946843325487912356 --parent-node-token wikc ## Notes - `--space-id my_library` is a per-user alias and only valid with `--as user`. The shortcut will refuse `--as bot` with `my_library` upfront. +- `--space-id` is a numeric wiki `space_id`. Do not pass a wiki URL, wiki node token, document token, or title. Use `lark-cli wiki +space-list --as user` to discover it. +- `--parent-node-token` must resolve to a wiki node token. If you have a docx/sheet/base/file URL, first run `lark-cli wiki +node-get --node-token ` and use the returned `node_token`. +- Treat `invalid_parameters` (`space_id is not int`, `invalid page_token`), `not_found` (`node not found by parent node token`), and `permission_denied` as terminal for the current arguments. Fix the argument or permission before retrying. +- For `rate_limit`, stop immediate retries and retry later with exponential backoff or a smaller `--page-limit`. ## Required Scope diff --git a/tests/cli_e2e/apps/apps_db_execute_dryrun_test.go b/tests/cli_e2e/apps/apps_db_execute_dryrun_test.go index adbcc778b..f801ebd29 100644 --- a/tests/cli_e2e/apps/apps_db_execute_dryrun_test.go +++ b/tests/cli_e2e/apps/apps_db_execute_dryrun_test.go @@ -15,11 +15,11 @@ import ( ) // TestAppsDBExecuteDryRun pins +db-execute 复用存量 URL,CLI 永远走 DBA 模式 -// (?transactional=false),sql body 由 --sql 透传,默认 env=dev。 +// (?transactional=false),sql body 由 --sql 透传,默认不传 env(空值,由服务端按 workspace 定分支)。 func TestAppsDBExecuteDryRun(t *testing.T) { setAppsDryRunEnv(t) - t.Run("DefaultEnvIsDevAndTransactionalFalse", func(t *testing.T) { + t.Run("DefaultEnvUnsetAndTransactionalFalse", func(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) t.Cleanup(cancel) @@ -37,8 +37,8 @@ func TestAppsDBExecuteDryRun(t *testing.T) { "CLI is DBA mode → must send transactional=false in query") assert.False(t, gjson.Get(result.Stdout, "api.0.body.transactional").Exists(), "transactional should be in query, not body") - assert.Equal(t, "dev", gjson.Get(result.Stdout, "api.0.params.env").String(), - "default env must be dev (not production)") + assert.False(t, gjson.Get(result.Stdout, "api.0.params.env").Exists(), + "default: no --environment → env key must be omitted (server picks workspace default branch)") }) t.Run("OnlineEnvSwitch", func(t *testing.T) { diff --git a/tests/cli_e2e/apps/apps_db_table_list_dryrun_test.go b/tests/cli_e2e/apps/apps_db_table_list_dryrun_test.go index b99d99b6f..28e1e2eae 100644 --- a/tests/cli_e2e/apps/apps_db_table_list_dryrun_test.go +++ b/tests/cli_e2e/apps/apps_db_table_list_dryrun_test.go @@ -19,7 +19,7 @@ import ( func TestAppsDBTableListDryRun(t *testing.T) { setAppsDryRunEnv(t) - t.Run("DefaultsToDevAndPageSize20", func(t *testing.T) { + t.Run("DefaultsToNoEnvAndPageSize20", func(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) t.Cleanup(cancel) @@ -32,7 +32,8 @@ func TestAppsDBTableListDryRun(t *testing.T) { assert.Equal(t, "GET", gjson.Get(result.Stdout, "api.0.method").String()) assert.Equal(t, "/open-apis/spark/v1/apps/app_x/tables", gjson.Get(result.Stdout, "api.0.url").String()) - assert.Equal(t, "dev", gjson.Get(result.Stdout, "api.0.params.env").String()) + assert.False(t, gjson.Get(result.Stdout, "api.0.params.env").Exists(), + "default: no --environment → env key must be omitted (server picks workspace default branch)") assert.Equal(t, "20", gjson.Get(result.Stdout, "api.0.params.page_size").String()) assert.False(t, gjson.Get(result.Stdout, "api.0.params.page_token").Exists(), "empty page_token must be omitted") diff --git a/tests/cli_e2e/core.go b/tests/cli_e2e/core.go index 2a5f62cb0..adc296234 100644 --- a/tests/cli_e2e/core.go +++ b/tests/cli_e2e/core.go @@ -24,7 +24,17 @@ import ( const EnvBinaryPath = "LARK_CLI_BIN" const projectRootMarkerDir = "tests" const cliBinaryName = "lark-cli" -const CleanupTimeout = 30 * time.Second + +const ( + // CleanupTimeout is the outer teardown budget. Keep it above any + // per-resource wait so cleanup command retries still have room to run. + CleanupTimeout = 60 * time.Second + + defaultRetryAttempts = 4 + defaultRetryInitialDelay = time.Second + defaultRetryMaxDelay = 6 * time.Second + defaultRetryBackoffMultiple = 2 +) func SkipWithoutUserToken(t *testing.T) { t.Helper() @@ -102,6 +112,34 @@ type Result struct { RunErr error } +type cleanupWarningError struct { + err error +} + +func (e *cleanupWarningError) Error() string { + return e.err.Error() +} + +func (e *cleanupWarningError) Unwrap() error { + return e.err +} + +// CleanupWarning marks a cleanup verification issue as non-fatal after the +// destructive cleanup command itself has already succeeded. +func CleanupWarning(err error) error { + if err == nil { + return nil + } + return &cleanupWarningError{err: err} +} + +// IsCleanupWarning reports whether err should be logged without failing the +// parent test. +func IsCleanupWarning(err error) bool { + var warning *cleanupWarningError + return errors.As(err, &warning) +} + // RetryOptions configures retry behavior for flaky external API calls. type RetryOptions struct { Attempts int @@ -111,8 +149,25 @@ type RetryOptions struct { ShouldRetry func(*Result) bool } +// WaitOptions configures a bounded poll loop for eventually consistent cleanup +// or verification checks. +type WaitOptions struct { + Timeout time.Duration + Interval time.Duration + TimeoutError func() error +} + // RunCmd executes lark-cli and captures stdout/stderr/exit code. +// Service errors that return {"error":{"retryable":true}} are retried with +// bounded exponential backoff so individual tests do not need to remember +// RunCmdWithRetry for normal transient server contention. func RunCmd(ctx context.Context, req Request) (*Result, error) { + return RunCmdWithRetry(ctx, req, RetryOptions{ + ShouldRetry: ResultHasRetryableError, + }) +} + +func runCmdOnce(ctx context.Context, req Request) (*Result, error) { binaryPath, err := ResolveBinaryPath(req) if err != nil { return nil, err @@ -186,16 +241,16 @@ func buildCommandEnv(req Request) []string { // RunCmdWithRetry reruns a command when the result matches the configured retry condition. func RunCmdWithRetry(ctx context.Context, req Request, opts RetryOptions) (*Result, error) { if opts.Attempts <= 0 { - opts.Attempts = 4 + opts.Attempts = defaultRetryAttempts } if opts.InitialDelay <= 0 { - opts.InitialDelay = 1 * time.Second + opts.InitialDelay = defaultRetryInitialDelay } if opts.MaxDelay <= 0 { - opts.MaxDelay = 6 * time.Second + opts.MaxDelay = defaultRetryMaxDelay } if opts.BackoffMultiple <= 1 { - opts.BackoffMultiple = 2 + opts.BackoffMultiple = defaultRetryBackoffMultiple } if opts.ShouldRetry == nil { opts.ShouldRetry = func(result *Result) bool { @@ -206,7 +261,7 @@ func RunCmdWithRetry(ctx context.Context, req Request, opts RetryOptions) (*Resu delay := opts.InitialDelay var lastResult *Result for attempt := 1; attempt <= opts.Attempts; attempt++ { - result, err := RunCmd(ctx, req) + result, err := runCmdOnce(ctx, req) if err != nil { return nil, err } @@ -234,6 +289,63 @@ func RunCmdWithRetry(ctx context.Context, req Request, opts RetryOptions) (*Resu return lastResult, nil } +// ResultHasRetryableError reports whether lark-cli returned a structured +// service error with error.retryable=true in either output stream. +func ResultHasRetryableError(result *Result) bool { + if result == nil { + return false + } + return rawHasRetryableError(result.Stdout) || rawHasRetryableError(result.Stderr) +} + +func rawHasRetryableError(raw string) bool { + payload := extractJSONPayload(raw) + if payload == "" { + return false + } + return gjson.Get(payload, "error.retryable").Bool() +} + +// WaitForCondition polls condition until it returns true, an error, the context +// is canceled, or the configured timeout expires. +func WaitForCondition(ctx context.Context, opts WaitOptions, condition func() (bool, error)) error { + if condition == nil { + return errors.New("wait condition is nil") + } + if opts.Timeout <= 0 { + opts.Timeout = CleanupTimeout + } + if opts.Interval <= 0 { + opts.Interval = time.Second + } + + deadline := time.NewTimer(opts.Timeout) + defer deadline.Stop() + ticker := time.NewTicker(opts.Interval) + defer ticker.Stop() + + for { + done, err := condition() + if err != nil { + return err + } + if done { + return nil + } + + select { + case <-ctx.Done(): + return ctx.Err() + case <-deadline.C: + if opts.TimeoutError != nil { + return opts.TimeoutError() + } + return fmt.Errorf("condition still false after %s", opts.Timeout) + case <-ticker.C: + } + } +} + // GenerateSuffix returns a high-entropy UTC timestamp suffix suitable for remote test resource names. func GenerateSuffix() string { now := time.Now().UTC() @@ -251,6 +363,10 @@ func ReportCleanupFailure(parentT *testing.T, prefix string, result *Result, err parentT.Helper() if err != nil { + if IsCleanupWarning(err) { + parentT.Logf("%s: %v", prefix, err) + return + } parentT.Errorf("%s: %v", prefix, err) return } @@ -271,26 +387,11 @@ func isCleanupSuppressedResult(result *Result) bool { return false } - raw := strings.TrimSpace(result.Stdout) - if raw == "" { - raw = strings.TrimSpace(result.Stderr) + payload := extractJSONPayload(result.Stdout) + if payload == "" { + payload = extractJSONPayload(result.Stderr) } - if raw == "" { - return false - } - - start := strings.LastIndex(raw, "\n{") - if start >= 0 { - start++ - } else { - start = strings.Index(raw, "{") - } - if start < 0 { - return false - } - - payload := raw[start:] - if !gjson.Valid(payload) { + if payload == "" { return false } @@ -306,6 +407,32 @@ func isCleanupSuppressedResult(result *Result) bool { return errType == "api_error" && (errCode == 800004135 || strings.Contains(errMessage, " limited")) } +func extractJSONPayload(raw string) string { + raw = strings.TrimSpace(raw) + if raw == "" { + return "" + } + if gjson.Valid(raw) { + return raw + } + + start := strings.LastIndex(raw, "\n{") + if start >= 0 { + start++ + } else { + start = strings.Index(raw, "{") + } + if start < 0 { + return "" + } + + payload := raw[start:] + if !gjson.Valid(payload) { + return "" + } + return payload +} + // ResolveBinaryPath finds the CLI binary path using request, env, then PATH. func ResolveBinaryPath(req Request) (string, error) { if req.BinaryPath != "" { diff --git a/tests/cli_e2e/core_test.go b/tests/cli_e2e/core_test.go index 803d0ee74..853872ee9 100644 --- a/tests/cli_e2e/core_test.go +++ b/tests/cli_e2e/core_test.go @@ -5,10 +5,12 @@ package clie2e import ( "context" + "errors" "os" "path/filepath" "strings" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -223,6 +225,88 @@ func TestRunCmd(t *testing.T) { assert.NotContains(t, env, "LARKSUITE_CLI_APP_ID=cli_app_test") assert.NotContains(t, env, "LARKSUITE_CLI_USER_ACCESS_TOKEN=uat_test") }) + + t.Run("retries structured retryable service errors by default", func(t *testing.T) { + fake := newFakeCLI(t) + statePath := filepath.Join(t.TempDir(), "retry-count") + result, err := RunCmd(context.Background(), Request{ + BinaryPath: fake.BinaryPath, + Args: []string{"fail-once-retryable", statePath}, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + result.AssertStdoutStatus(t, true) + + countBytes, err := os.ReadFile(statePath) + require.NoError(t, err) + assert.Equal(t, "2\n", string(countBytes)) + }) + + t.Run("does not retry non-retryable service errors by default", func(t *testing.T) { + fake := newFakeCLI(t) + statePath := filepath.Join(t.TempDir(), "retry-count") + result, err := RunCmd(context.Background(), Request{ + BinaryPath: fake.BinaryPath, + Args: []string{"always-non-retryable", statePath}, + }) + require.NoError(t, err) + result.AssertExitCode(t, 1) + + countBytes, err := os.ReadFile(statePath) + require.NoError(t, err) + assert.Equal(t, "1\n", string(countBytes)) + }) +} + +func TestRunCmdWithRetry(t *testing.T) { + t.Run("does not include RunCmd default retry as a nested retry", func(t *testing.T) { + fake := newFakeCLI(t) + statePath := filepath.Join(t.TempDir(), "retry-count") + result, err := RunCmdWithRetry(context.Background(), Request{ + BinaryPath: fake.BinaryPath, + Args: []string{"fail-once-retryable", statePath}, + }, RetryOptions{ + Attempts: 1, + InitialDelay: time.Millisecond, + MaxDelay: time.Millisecond, + ShouldRetry: ResultHasRetryableError, + }) + require.NoError(t, err) + result.AssertExitCode(t, 1) + + countBytes, err := os.ReadFile(statePath) + require.NoError(t, err) + assert.Equal(t, "1\n", string(countBytes)) + }) +} + +func TestWaitForCondition(t *testing.T) { + t.Run("polls until condition succeeds", func(t *testing.T) { + attempts := 0 + err := WaitForCondition(context.Background(), WaitOptions{ + Timeout: 50 * time.Millisecond, + Interval: time.Millisecond, + }, func() (bool, error) { + attempts++ + return attempts == 2, nil + }) + + require.NoError(t, err) + assert.Equal(t, 2, attempts) + }) + + t.Run("returns custom timeout error", func(t *testing.T) { + wantErr := errors.New("still visible") + err := WaitForCondition(context.Background(), WaitOptions{ + Timeout: time.Millisecond, + Interval: time.Millisecond, + TimeoutError: func() error { return wantErr }, + }, func() (bool, error) { + return false, nil + }) + + assert.ErrorIs(t, err, wantErr) + }) } type fakeCLI struct { @@ -260,6 +344,35 @@ if [ "$1" = "emit-stdin" ]; then exit 0 fi +if [ "$1" = "fail-once-retryable" ]; then + state="$2" + count=0 + if [ -f "$state" ]; then + count="$(cat "$state")" + fi + count=$((count + 1)) + echo "$count" > "$state" + if [ "$count" -eq 1 ]; then + echo "Deleting folder fake..." >&2 + echo '{"ok":false,"error":{"type":"api","code":1061045,"message":"resource contention occurred, please retry.","retryable":true}}' >&2 + exit 1 + fi + echo '{"ok":true}' + exit 0 +fi + +if [ "$1" = "always-non-retryable" ]; then + state="$2" + count=0 + if [ -f "$state" ]; then + count="$(cat "$state")" + fi + count=$((count + 1)) + echo "$count" > "$state" + echo '{"ok":false,"error":{"type":"api","code":123,"message":"validation failed","retryable":false}}' >&2 + exit 1 +fi + exit_code=0 while [ "$#" -gt 0 ]; do case "$1" in diff --git a/tests/cli_e2e/docs/coverage.md b/tests/cli_e2e/docs/coverage.md index b25f35fc0..77e243c17 100644 --- a/tests/cli_e2e/docs/coverage.md +++ b/tests/cli_e2e/docs/coverage.md @@ -1,9 +1,9 @@ # Docs CLI E2E Coverage ## Metrics -- Denominator: 8 leaf commands -- Covered: 3 -- Coverage: 37.5% +- Denominator: 11 leaf commands +- Covered: 6 +- Coverage: 54.5% ## Summary - TestDocs_CreateAndFetchWorkflow: proves `docs +create` and `docs +fetch`; key `t.Run(...)` proof points are `create as bot` and `fetch as bot`. @@ -11,6 +11,8 @@ - TestDocs_UpdateWorkflow: proves `docs +update` via `update-title-and-content as bot`, then re-fetches the same doc in `verify as bot` to assert persisted title/content changes. - TestDocs_DryRunDefaultsToV2OpenAPI: proves `docs +create`, `docs +fetch`, and `docs +update` dry-run all emit `/open-apis/docs_ai/v1/...` requests without MCP or `--api-version` guidance; its fetch case asserts fetch sends the default `extra_param`, and its update case asserts `--reference-map` is sent as request body `reference_map`. - TestDocs_CreateTitleDryRunPrependsContent: proves `docs +create --title` dry-run prepends an escaped `...` tag to request body `content`. +- TestDocs_DryRunDefaultsToV2OpenAPI also proves `docs +history-list`, `docs +history-revert`, and `docs +history-revert-status` dry-run endpoint and query/body shapes. +- TestDocs_HistoryWorkflow proves the guarded live history flow (`LARK_DOC_HISTORY_E2E=1`): create, update, list prior revisions, revert, poll status when needed, and fetch to verify reverted content. - Setup note: docs workflows create a Drive folder through `drive files create_folder` in `helpers_test.go`; that helper is external to the docs domain and is not counted here. - Blocked area: media and search shortcuts still need deterministic fixtures and local file orchestration. @@ -19,7 +21,10 @@ | Status | Cmd | Type | Testcase | Key parameter shapes | Notes / uncovered reason | | --- | --- | --- | --- | --- | --- | | ✓ | docs +create | shortcut | docs/helpers_test.go::createDocWithRetry; docs_create_fetch_test.go::TestDocs_CreateAndFetchWorkflowAsUser/create as user; docs_update_dryrun_test.go::TestDocs_DryRunDefaultsToV2OpenAPI/create; docs_update_dryrun_test.go::TestDocs_CreateTitleDryRunPrependsContent | `--parent-token`; `--doc-format markdown`; `--content`; `--title` | helper asserts returned doc id from `data.document.document_id`; dry-run asserts title is prepended into request body content | -| ✓ | docs +fetch | shortcut | docs_create_fetch_test.go::TestDocs_CreateAndFetchWorkflow/fetch as bot; docs_update_test.go::TestDocs_UpdateWorkflow/verify as bot; docs_create_fetch_test.go::TestDocs_CreateAndFetchWorkflowAsUser/fetch as user; docs_update_dryrun_test.go::TestDocs_DryRunDefaultsToV2OpenAPI/fetch | `--doc `; `--doc-format markdown`; default `extra_param.enable_user_cite_reference_map=true` | | +| ✓ | docs +fetch | shortcut | docs_fetch_dryrun_test.go::TestDocsFetchDryRunIgnoresAPIVersionCompatFlag; docs_create_fetch_test.go::TestDocs_CreateAndFetchWorkflow/fetch as bot; docs_update_test.go::TestDocs_UpdateWorkflow/verify as bot; docs_create_fetch_test.go::TestDocs_CreateAndFetchWorkflowAsUser/fetch as user; docs_update_dryrun_test.go::TestDocs_DryRunDefaultsToV2OpenAPI/fetch | `--doc `; `--doc-format markdown`; default `extra_param.enable_user_cite_reference_map=true`; `--api-version v1` compatibility flag still dry-runs the v2 fetch endpoint | | +| ✓ | docs +history-list | shortcut | docs_update_dryrun_test.go::TestDocs_DryRunDefaultsToV2OpenAPI/history list; docs_history_workflow_test.go::TestDocs_HistoryWorkflow | `--doc`; `--page-size`; `--page-token` | live workflow gated by `LARK_DOC_HISTORY_E2E=1` | +| ✓ | docs +history-revert | shortcut | docs_update_dryrun_test.go::TestDocs_DryRunDefaultsToV2OpenAPI/history revert; docs_history_workflow_test.go::TestDocs_HistoryWorkflow | `--doc`; `--history-version-id`; `--wait-timeout-ms` | live workflow gated by `LARK_DOC_HISTORY_E2E=1` | +| ✓ | docs +history-revert-status | shortcut | docs_update_dryrun_test.go::TestDocs_DryRunDefaultsToV2OpenAPI/history revert status; docs_history_workflow_test.go::TestDocs_HistoryWorkflow | `--doc`; `--task-id` | live workflow polls only when revert returns `running` | | ✕ | docs +media-download | shortcut | | none | no media fixture workflow yet | | ✕ | docs +media-insert | shortcut | | none | requires deterministic upload fixture and rollback assertions | | ✕ | docs +media-preview | shortcut | | none | requires deterministic media fixture | diff --git a/tests/cli_e2e/doc/docs_dryrun_test.go b/tests/cli_e2e/docs/docs_fetch_dryrun_test.go similarity index 97% rename from tests/cli_e2e/doc/docs_dryrun_test.go rename to tests/cli_e2e/docs/docs_fetch_dryrun_test.go index 02fb0ac28..c1acda357 100644 --- a/tests/cli_e2e/doc/docs_dryrun_test.go +++ b/tests/cli_e2e/docs/docs_fetch_dryrun_test.go @@ -1,7 +1,7 @@ // Copyright (c) 2026 Lark Technologies Pte. Ltd. // SPDX-License-Identifier: MIT -package doc +package docs import ( "context" @@ -23,7 +23,7 @@ func TestDocsFetchDryRunIgnoresAPIVersionCompatFlag(t *testing.T) { Args: []string{ "docs", "+fetch", "--doc", "doxcnDryRunCompat", - "--api-version", "legacy", + "--api-version", "v1", "--dry-run", }, DefaultAs: "bot", diff --git a/tests/cli_e2e/docs/docs_history_workflow_test.go b/tests/cli_e2e/docs/docs_history_workflow_test.go new file mode 100644 index 000000000..b4035eb7c --- /dev/null +++ b/tests/cli_e2e/docs/docs_history_workflow_test.go @@ -0,0 +1,137 @@ +// Copyright (c) 2026 Lark Technologies Pte. Ltd. +// SPDX-License-Identifier: MIT + +package docs + +import ( + "context" + "os" + "testing" + "time" + + clie2e "github.com/larksuite/cli/tests/cli_e2e" + "github.com/larksuite/cli/tests/cli_e2e/drive" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/tidwall/gjson" +) + +func TestDocs_HistoryWorkflow(t *testing.T) { + if os.Getenv("LARK_DOC_HISTORY_E2E") != "1" { + t.Skip("set LARK_DOC_HISTORY_E2E=1 to run docs history live workflow") + } + clie2e.SkipWithoutUserToken(t) + + parentT := t + ctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute) + t.Cleanup(cancel) + + suffix := clie2e.GenerateSuffix() + folderName := "lark-cli-e2e-docs-history-folder-" + suffix + docTitle := "lark-cli-e2e-docs-history-" + suffix + originalMarker := "original history marker " + suffix + updatedMarker := "updated history marker " + suffix + const defaultAs = "user" + + folderToken := drive.CreateDriveFolder(t, parentT, ctx, folderName, defaultAs, "") + docToken := createDocWithRetry(t, parentT, ctx, folderToken, docTitle, originalMarker, defaultAs) + + updateResult, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "docs", "+update", + "--doc", docToken, + "--command", "overwrite", + "--doc-format", "markdown", + "--content", "# " + docTitle + "\n\n" + updatedMarker, + }, + DefaultAs: defaultAs, + }) + require.NoError(t, err) + updateResult.AssertExitCode(t, 0) + updateResult.AssertStdoutStatus(t, true) + + fetchUpdated, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{"docs", "+fetch", "--doc", docToken, "--doc-format", "markdown"}, + DefaultAs: defaultAs, + }) + require.NoError(t, err) + fetchUpdated.AssertExitCode(t, 0) + fetchUpdated.AssertStdoutStatus(t, true) + updatedContent := gjson.Get(fetchUpdated.Stdout, "data.document.content").String() + assert.Contains(t, updatedContent, updatedMarker) + currentRevision := gjson.Get(fetchUpdated.Stdout, "data.document.revision_id").Int() + require.Greater(t, currentRevision, int64(0), "stdout:\n%s", fetchUpdated.Stdout) + + var revertHistoryVersionID string + require.Eventually(t, func() bool { + listResult, listErr := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "docs", "+history-list", + "--doc", docToken, + "--page-size", "20", + }, + DefaultAs: defaultAs, + }) + require.NoError(t, listErr) + listResult.AssertExitCode(t, 0) + listResult.AssertStdoutStatus(t, true) + for _, entry := range gjson.Get(listResult.Stdout, "data.entries").Array() { + revisionID := entry.Get("revision_id").Int() + historyVersionID := entry.Get("history_version_id").String() + if revisionID > 0 && revisionID < currentRevision && historyVersionID != "" { + revertHistoryVersionID = historyVersionID + return true + } + } + return false + }, 45*time.Second, 3*time.Second, "history list did not expose a prior revision") + require.NotEmpty(t, revertHistoryVersionID) + + revertResult, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "docs", "+history-revert", + "--doc", docToken, + "--history-version-id", revertHistoryVersionID, + "--wait-timeout-ms", "30000", + }, + DefaultAs: defaultAs, + }) + require.NoError(t, err) + revertResult.AssertExitCode(t, 0) + revertResult.AssertStdoutStatus(t, true) + + status := gjson.Get(revertResult.Stdout, "data.status").String() + taskID := gjson.Get(revertResult.Stdout, "data.task_id").String() + statusStdout := revertResult.Stdout + if status == "running" { + require.NotEmpty(t, taskID, "stdout:\n%s", revertResult.Stdout) + require.Eventually(t, func() bool { + statusResult, statusErr := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "docs", "+history-revert-status", + "--doc", docToken, + "--task-id", taskID, + }, + DefaultAs: defaultAs, + }) + require.NoError(t, statusErr) + statusResult.AssertExitCode(t, 0) + statusResult.AssertStdoutStatus(t, true) + statusStdout = statusResult.Stdout + status = gjson.Get(statusResult.Stdout, "data.status").String() + return status != "" && status != "running" + }, 60*time.Second, 5*time.Second, "history revert task did not finish") + } + require.Equal(t, "done", status, "status stdout:\n%s", statusStdout) + + fetchReverted, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{"docs", "+fetch", "--doc", docToken, "--doc-format", "markdown"}, + DefaultAs: defaultAs, + }) + require.NoError(t, err) + fetchReverted.AssertExitCode(t, 0) + fetchReverted.AssertStdoutStatus(t, true) + revertedContent := gjson.Get(fetchReverted.Stdout, "data.document.content").String() + assert.Contains(t, revertedContent, originalMarker) + assert.NotContains(t, revertedContent, updatedMarker) +} diff --git a/tests/cli_e2e/docs/docs_update_dryrun_test.go b/tests/cli_e2e/docs/docs_update_dryrun_test.go index 23dbd1db7..1a6aaa29a 100644 --- a/tests/cli_e2e/docs/docs_update_dryrun_test.go +++ b/tests/cli_e2e/docs/docs_update_dryrun_test.go @@ -26,7 +26,10 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { tests := []struct { name string args []string + wantContains []string wantURL string + wantParams map[string]any + wantBody map[string]any wantExtraParam string wantRefLabel string }{ @@ -37,7 +40,7 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { "--content", "Dry Run

hello

", "--dry-run", }, - wantURL: "/open-apis/docs_ai/v1/documents", + wantContains: []string{"/open-apis/docs_ai/v1/documents"}, }, { name: "create api-version v1 compatibility", @@ -47,7 +50,7 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { "--content", "Dry Run

hello

", "--dry-run", }, - wantURL: "/open-apis/docs_ai/v1/documents", + wantContains: []string{"/open-apis/docs_ai/v1/documents"}, }, { name: "fetch", @@ -56,7 +59,7 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { "--doc", "doxcnDryRunE2E", "--dry-run", }, - wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E/fetch", + wantContains: []string{"/open-apis/docs_ai/v1/documents/doxcnDryRunE2E/fetch"}, wantExtraParam: `{"enable_user_cite_reference_map":true,"return_html5_block_data":true}`, }, { @@ -68,7 +71,7 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { "--content", "

hello

", "--dry-run", }, - wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E", + wantContains: []string{"/open-apis/docs_ai/v1/documents/doxcnDryRunE2E"}, }, { name: "update reference-map", @@ -80,7 +83,7 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { "--reference-map", `{"widget":{"r1":{"label":"widget-ref-value"}}}`, "--dry-run", }, - wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E", + wantContains: []string{"/open-apis/docs_ai/v1/documents/doxcnDryRunE2E"}, wantRefLabel: "widget-ref-value", }, { @@ -92,7 +95,50 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { "--block-id", "blkA,blkB,blkC", "--dry-run", }, - wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E", + wantContains: []string{"/open-apis/docs_ai/v1/documents/doxcnDryRunE2E"}, + }, + { + name: "history list", + args: []string{ + "docs", "+history-list", + "--doc", "doxcnDryRunE2E", + "--page-size", "5", + "--page-token", "page_token_1", + "--dry-run", + }, + wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E/histories", + wantParams: map[string]any{ + "page_size": 5, + "page_token": "page_token_1", + }, + }, + { + name: "history revert", + args: []string{ + "docs", "+history-revert", + "--doc", "doxcnDryRunE2E", + "--history-version-id", "42", + "--wait-timeout-ms", "0", + "--dry-run", + }, + wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E/history/revert", + wantBody: map[string]any{ + "history_version_id": "42", + "wait_timeout_ms": 0, + }, + }, + { + name: "history revert status", + args: []string{ + "docs", "+history-revert-status", + "--doc", "doxcnDryRunE2E", + "--task-id", "task_1", + "--dry-run", + }, + wantURL: "/open-apis/docs_ai/v1/documents/doxcnDryRunE2E/history/revert_status", + wantParams: map[string]any{ + "task_id": "task_1", + }, }, } @@ -106,10 +152,7 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { result.AssertExitCode(t, 0) combined := result.Stdout + "\n" + result.Stderr - for _, want := range []string{ - tt.wantURL, - "docs_ai/v1", - } { + for _, want := range append(tt.wantContains, "docs_ai/v1") { if !strings.Contains(combined, want) { t.Fatalf("dry-run output missing %q\nstdout:\n%s\nstderr:\n%s", want, result.Stdout, result.Stderr) } @@ -120,6 +163,15 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { if strings.Contains(combined, "--api-version") { t.Fatalf("dry-run output should not ask for --api-version\nstdout:\n%s\nstderr:\n%s", result.Stdout, result.Stderr) } + if tt.wantURL != "" { + require.Equal(t, tt.wantURL, gjson.Get(result.Stdout, "api.0.url").String(), "stdout:\n%s", result.Stdout) + } + for key, want := range tt.wantParams { + assertDryRunField(t, result.Stdout, "api.0.params."+key, want) + } + for key, want := range tt.wantBody { + assertDryRunField(t, result.Stdout, "api.0.body."+key, want) + } if tt.wantExtraParam != "" { extraParam := gjson.Get(result.Stdout, "api.0.body.extra_param").String() require.JSONEq(t, tt.wantExtraParam, extraParam, "stdout:\n%s", result.Stdout) @@ -132,6 +184,21 @@ func TestDocs_DryRunDefaultsToV2OpenAPI(t *testing.T) { } } +func assertDryRunField(t *testing.T, stdout, path string, want any) { + t.Helper() + + got := gjson.Get(stdout, path) + require.True(t, got.Exists(), "%s missing in stdout:\n%s", path, stdout) + switch want := want.(type) { + case int: + require.Equal(t, int64(want), got.Int(), "%s in stdout:\n%s", path, stdout) + case string: + require.Equal(t, want, got.String(), "%s in stdout:\n%s", path, stdout) + default: + t.Fatalf("unsupported dry-run assertion type %T for %s", want, path) + } +} + func TestDocs_CreateTitleDryRunPrependsContent(t *testing.T) { // Fake creds are enough — dry-run short-circuits before any real API call. t.Setenv("LARKSUITE_CLI_APP_ID", "app") diff --git a/tests/cli_e2e/drive/helpers.go b/tests/cli_e2e/drive/helpers.go index 1cf1fa734..86ee49ff8 100644 --- a/tests/cli_e2e/drive/helpers.go +++ b/tests/cli_e2e/drive/helpers.go @@ -14,6 +14,18 @@ import ( "github.com/tidwall/gjson" ) +const ( + driveDeleteVisibilityTimeout = 30 * time.Second + driveDeleteVisibilityPoll = 3 * time.Second +) + +var driveDeleteVisibilityWait = clie2e.WaitOptions{ + // This wait only covers the post-delete visibility lag after Drive accepts + // deletion. The delete command itself is bounded by clie2e.CleanupContext. + Timeout: driveDeleteVisibilityTimeout, + Interval: driveDeleteVisibilityPoll, +} + // CreateDriveFolder creates a Drive folder, optionally under a parent folder, and // deletes it during parent cleanup. func CreateDriveFolder(t *testing.T, parentT *testing.T, ctx context.Context, name string, defaultAs string, parentFolderToken string) string { @@ -60,14 +72,18 @@ func CreateDriveFolder(t *testing.T, parentT *testing.T, ctx context.Context, na // returned a suppressed not_found or partial API error but the resource still // exists. func DeleteDriveResourceAndVerify(ctx context.Context, token, docType, defaultAs string) (*clie2e.Result, error) { + return deleteDriveResourceAndVerify(ctx, token, docType, defaultAs, driveDeleteVisibilityWait) +} + +func deleteDriveResourceAndVerify(ctx context.Context, token, docType, defaultAs string, visibilityWait clie2e.WaitOptions) (*clie2e.Result, error) { if defaultAs == "" { defaultAs = "bot" } - deleteResult, deleteErr := clie2e.RunCmdWithRetry(ctx, clie2e.Request{ + deleteResult, deleteErr := clie2e.RunCmd(ctx, clie2e.Request{ Args: []string{"drive", "+delete", "--file-token", token, "--type", docType, "--yes"}, DefaultAs: defaultAs, - }, clie2e.RetryOptions{}) + }) if deleteErr != nil || deleteResult == nil { return deleteResult, deleteErr } @@ -82,35 +98,21 @@ func DeleteDriveResourceAndVerify(ctx context.Context, token, docType, defaultAs } return deleteResult, fmt.Errorf("drive resource %s/%s still exists after delete failed: exit=%d stdout=%s stderr=%s", docType, token, deleteResult.ExitCode, deleteResult.Stdout, deleteResult.Stderr) } - if err := WaitDriveResourceDeleted(ctx, token, docType, defaultAs); err != nil { - return deleteResult, err + if err := waitDriveResourceDeleted(ctx, token, docType, defaultAs, visibilityWait); err != nil { + return deleteResult, clie2e.CleanupWarning( + fmt.Errorf("drive resource %s/%s still visible after accepted delete: %w", docType, token, err), + ) } return deleteResult, nil } -func WaitDriveResourceDeleted(ctx context.Context, token, docType, defaultAs string) error { - deadline := time.NewTimer(20 * time.Second) - defer deadline.Stop() - ticker := time.NewTicker(time.Second) - defer ticker.Stop() - - for { - deleted, err := IsDriveResourceDeleted(ctx, token, docType, defaultAs) - if err != nil { - return err - } - if deleted { - return nil - } - - select { - case <-ctx.Done(): - return ctx.Err() - case <-deadline.C: - return fmt.Errorf("drive resource %s/%s still exists after delete", docType, token) - case <-ticker.C: - } +func waitDriveResourceDeleted(ctx context.Context, token, docType, defaultAs string, opts clie2e.WaitOptions) error { + opts.TimeoutError = func() error { + return fmt.Errorf("drive resource %s/%s still exists %s after delete", docType, token, opts.Timeout) } + return clie2e.WaitForCondition(ctx, opts, func() (bool, error) { + return IsDriveResourceDeleted(ctx, token, docType, defaultAs) + }) } func IsDriveResourceDeleted(ctx context.Context, token, docType, defaultAs string) (bool, error) { diff --git a/tests/cli_e2e/drive/helpers_test.go b/tests/cli_e2e/drive/helpers_test.go index 75249126a..d118c1fe9 100644 --- a/tests/cli_e2e/drive/helpers_test.go +++ b/tests/cli_e2e/drive/helpers_test.go @@ -5,8 +5,13 @@ package drive import ( "context" + "os" + "path/filepath" "testing" + "time" + clie2e "github.com/larksuite/cli/tests/cli_e2e" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -16,3 +21,59 @@ func createDriveFolder(t *testing.T, parentT *testing.T, ctx context.Context, na require.NotEmpty(t, folderToken) return folderToken } + +func TestDeleteDriveResourceAndVerify(t *testing.T) { + t.Run("successful delete with stale meta returns cleanup warning", func(t *testing.T) { + fake := mustWriteDriveCleanupFakeCLI(t) + t.Setenv(clie2e.EnvBinaryPath, fake) + + result, err := deleteDriveResourceAndVerify(context.Background(), "fld_stale", "folder", "bot", clie2e.WaitOptions{ + Timeout: 10 * time.Millisecond, + Interval: time.Millisecond, + }) + require.NotNil(t, result) + assert.Equal(t, 0, result.ExitCode) + require.Error(t, err) + assert.True(t, clie2e.IsCleanupWarning(err), "err: %v", err) + }) + + t.Run("failed delete with existing meta remains fatal", func(t *testing.T) { + fake := mustWriteDriveCleanupFakeCLI(t) + t.Setenv(clie2e.EnvBinaryPath, fake) + t.Setenv("FAKE_DRIVE_DELETE_EXIT", "1") + + result, err := DeleteDriveResourceAndVerify(context.Background(), "fld_existing", "folder", "bot") + require.NotNil(t, result) + assert.Equal(t, 1, result.ExitCode) + require.Error(t, err) + assert.False(t, clie2e.IsCleanupWarning(err), "err: %v", err) + assert.Contains(t, err.Error(), "still exists after delete failed") + }) +} + +func mustWriteDriveCleanupFakeCLI(t *testing.T) string { + t.Helper() + + script := `#!/bin/sh +if [ "$1" = "drive" ] && [ "$2" = "+delete" ]; then + if [ "${FAKE_DRIVE_DELETE_EXIT:-0}" != "0" ]; then + echo '{"ok":false,"error":{"type":"api","message":"delete failed"}}' >&2 + exit "$FAKE_DRIVE_DELETE_EXIT" + fi + echo '{"ok":true}' + exit 0 +fi + +if [ "$1" = "api" ] && [ "$2" = "post" ] && [ "$3" = "/open-apis/drive/v1/metas/batch_query" ]; then + echo '{"ok":true,"data":{"metas":[{"url":"https://example.com/still-visible"}]}}' + exit 0 +fi + +echo "unexpected fake CLI args: $*" >&2 +exit 2 +` + + binaryPath := filepath.Join(t.TempDir(), "fake-lark-cli") + require.NoError(t, os.WriteFile(binaryPath, []byte(script), 0o755)) + return binaryPath +} diff --git a/tests/cli_e2e/mail/coverage.md b/tests/cli_e2e/mail/coverage.md index 2910238f2..b37b64709 100644 --- a/tests/cli_e2e/mail/coverage.md +++ b/tests/cli_e2e/mail/coverage.md @@ -1,9 +1,9 @@ # Mail CLI E2E Coverage ## Metrics -- Denominator: 63 leaf commands -- Covered: 14 -- Coverage: 22.2% +- Denominator: 65 leaf commands +- Covered: 16 +- Coverage: 24.6% ## Summary - TestMail_DraftLifecycleWorkflowAsUser: proves a self-contained user draft workflow across `mail user_mailboxes profile`, `mail +draft-create`, `mail user_mailbox.drafts list`, `mail user_mailbox.drafts get`, `mail +draft-edit`, and `mail user_mailbox.drafts delete`; key `t.Run(...)` proof points are `get mailbox profile as user`, `create draft with shortcut as user`, `list draft as user`, `get created draft as user`, `inspect created draft as user`, `update draft subject with shortcut as user`, `inspect updated draft as user`, `delete draft as user`, and `verify draft removed from list as user`. @@ -20,6 +20,8 @@ | ✓ | mail +draft-send | shortcut | mail_draft_send_workflow_test.go::TestMail_DraftSendWorkflowAsUser/send draft with shortcut as user; mail_draft_send_dryrun_test.go::TestMail_DraftSendDryRun | `--draft-id`; `--mailbox me`; `--yes`; dry-run repeated/comma-separated `--draft-id` | sends a self-addressed draft through the batch shortcut and locks dry-run request shape | | ✓ | mail +forward | shortcut | mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/forward received message with shortcut as user; mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/inspect forward draft as user | `--message-id`; `--to`; `--body`; `--plain-text` | uses self-generated inbox message as source and inspects forwarded draft projection | | ✓ | mail +message | shortcut | mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/get sent message as user; mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/get received message as user | `--mailbox me`; `--message-id` | verifies both SENT and INBOX copies after self-send | +| ✓ | mail +message-modify | shortcut | shortcuts/mail/mail_message_manage_test.go::TestMessageModify_DryRunShowsPlanWithoutValidationGET; shortcuts/mail/mail_message_manage_test.go::TestMessageModify_BatchesAndAggregatesPartialFailure | `--message-ids`; `--add-label-ids`; `--remove-label-ids`; `--add-folder`; `--dry-run` | unit/dry-run coverage locks validation, batching, request shape, and partial failure aggregation; live E2E needs controlled disposable messages/labels/folders | +| ✓ | mail +message-trash | shortcut | shortcuts/mail/mail_message_manage_test.go::TestMessageTrash_RequiresYesAndBatches | `--message-ids`; `--yes`; `--dry-run` | unit coverage locks high-risk confirmation and batch_trash request shape; live E2E needs controlled disposable messages | | ✓ | mail +messages | shortcut | mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/get both self sent messages as user | `--mailbox me`; `--message-ids` | batch reads both sent and received message copies | | ✓ | mail +reply | shortcut | mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/reply to received message with shortcut as user; mail_send_workflow_test.go::TestMail_SendWorkflowAsUser/inspect reply draft as user | `--message-id`; `--body`; `--plain-text` | creates reply draft from self-generated inbox message and inspects quoted content | | ✕ | mail +reply-all | shortcut | | none | self-send traffic leaves no stable non-self recipient set for deterministic reply-all assertions | diff --git a/tests/cli_e2e/minutes/minutes_speaker_replace_test.go b/tests/cli_e2e/minutes/minutes_speaker_replace_test.go index 959446804..6df57658e 100644 --- a/tests/cli_e2e/minutes/minutes_speaker_replace_test.go +++ b/tests/cli_e2e/minutes/minutes_speaker_replace_test.go @@ -63,29 +63,5 @@ func TestMinutesSpeakerReplace_DryRun_FromSpeakerID(t *testing.T) { assert.True(t, strings.Contains(output, "from_speaker_id"), "dry-run should contain from_speaker_id, got: %s", output) assert.True(t, strings.Contains(output, "ENCRYPTED_TOKEN_ABC"), "dry-run should contain the encrypted speaker id, got: %s", output) assert.False(t, strings.Contains(output, "from_user_id"), "dry-run should not contain from_user_id when from-speaker-id is set, got: %s", output) -} - -func TestMinutesSpeakerReplace_DryRun_ResolveFromSpeakerID(t *testing.T) { - setDryRunConfigEnv(t) - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - t.Cleanup(cancel) - - result, err := clie2e.RunCmd(ctx, clie2e.Request{ - Args: []string{ - "minutes", "+speaker-replace", - "--minute-token", "obcnexampleminute", - "--from-speaker-id", "说话人1", - "--to-user-id", "ou_new_speaker", - "--dry-run", - }, - DefaultAs: "user", - }) - require.NoError(t, err) - result.AssertExitCode(t, 0) - - output := result.Stdout - assert.True(t, strings.Contains(output, "GET"), "dry-run should contain GET for internal speaker list, got: %s", output) - assert.True(t, strings.Contains(output, "/open-apis/minutes/v1/minutes/obcnexampleminute/transcript/speakerlist"), "dry-run should contain speakerlist API path, got: %s", output) - assert.True(t, strings.Contains(output, "PUT"), "dry-run should contain PUT method, got: %s", output) - assert.True(t, strings.Contains(output, "/open-apis/minutes/v1/minutes/obcnexampleminute/transcript/speaker"), "dry-run should contain speaker replace path, got: %s", output) + assert.False(t, strings.Contains(output, "/transcript/speakerlist"), "+speaker-replace should never fetch speakerlist, got: %s", output) } diff --git a/tests/cli_e2e/okr/okr_cycle_detail_test.go b/tests/cli_e2e/okr/okr_cycle_detail_test.go index 00949b03a..c878d9844 100644 --- a/tests/cli_e2e/okr/okr_cycle_detail_test.go +++ b/tests/cli_e2e/okr/okr_cycle_detail_test.go @@ -35,6 +35,48 @@ func TestOKR_CycleDetailDryRun(t *testing.T) { assert.True(t, strings.Contains(output, "123456"), "dry-run should contain cycle-id, got: %s", output) } +// TestOKR_CycleDetailDryRun_SimpleStyle validates +cycle-detail dry-run with --style simple. +func TestOKR_CycleDetailDryRun_SimpleStyle(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+cycle-detail", + "--cycle-id", "123456", + "--style", "simple", + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "/open-apis/okr/v2/cycles/123456/objectives"), "dry-run should contain API path, got: %s", output) +} + +// TestOKR_CycleDetailDryRun_RichTextStyle validates +cycle-detail dry-run with --style richtext. +func TestOKR_CycleDetailDryRun_RichTextStyle(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+cycle-detail", + "--cycle-id", "123456", + "--style", "richtext", + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "/open-apis/okr/v2/cycles/123456/objectives"), "dry-run should contain API path, got: %s", output) +} + func setDryRunConfigEnv(t *testing.T) { t.Helper() t.Setenv("LARKSUITE_CLI_APP_ID", "cli_dryrun_test") diff --git a/tests/cli_e2e/okr/okr_progress_test.go b/tests/cli_e2e/okr/okr_progress_test.go index d3b0816c9..ab8044146 100644 --- a/tests/cli_e2e/okr/okr_progress_test.go +++ b/tests/cli_e2e/okr/okr_progress_test.go @@ -74,6 +74,7 @@ func TestOKR_ProgressCreateDryRun(t *testing.T) { Args: []string{ "okr", "+progress-create", "--content", `{"blocks":[{"type":"text","text":"test progress"}]}`, + "--style", "richtext", "--target-id", "123456789", "--target-type", "objective", "--dry-run", @@ -86,6 +87,10 @@ func TestOKR_ProgressCreateDryRun(t *testing.T) { assert.True(t, strings.Contains(output, "/open-apis/okr/v1/progress_records/"), "dry-run should contain API path, got: %s", output) assert.True(t, strings.Contains(output, "POST"), "dry-run should contain POST method, got: %s", output) assert.True(t, strings.Contains(output, "123456789"), "dry-run should contain target-id, got: %s", output) + // Validate request body contains expected fields + assert.True(t, strings.Contains(output, `"target_id"`), "dry-run should contain target_id in request body, got: %s", output) + assert.True(t, strings.Contains(output, `"target_type"`), "dry-run should contain target_type in request body, got: %s", output) + assert.True(t, strings.Contains(output, `"content"`), "dry-run should contain content in request body, got: %s", output) } // TestOKR_ProgressCreateDryRun_WithProgress validates +progress-create dry-run with progress rate. @@ -98,6 +103,7 @@ func TestOKR_ProgressCreateDryRun_WithProgress(t *testing.T) { Args: []string{ "okr", "+progress-create", "--content", `{"blocks":[{"type":"text","text":"test progress"}]}`, + "--style", "richtext", "--target-id", "123456789", "--target-type", "key_result", "--progress-percent", "75", @@ -156,6 +162,48 @@ func TestOKR_ProgressGetDryRun_WithUserIDType(t *testing.T) { assert.True(t, strings.Contains(output, "/open-apis/okr/v1/progress_records/987654321"), "dry-run should contain API path, got: %s", output) } +// TestOKR_ProgressGetDryRun_SimpleStyle validates +progress-get dry-run with --style simple. +func TestOKR_ProgressGetDryRun_SimpleStyle(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+progress-get", + "--progress-id", "123456789", + "--style", "simple", + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "/open-apis/okr/v1/progress_records/123456789"), "dry-run should contain API path, got: %s", output) +} + +// TestOKR_ProgressGetDryRun_RichTextStyle validates +progress-get dry-run with --style richtext. +func TestOKR_ProgressGetDryRun_RichTextStyle(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+progress-get", + "--progress-id", "987654321", + "--style", "richtext", + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "/open-apis/okr/v1/progress_records/987654321"), "dry-run should contain API path, got: %s", output) +} + // --- Progress Update Dry-run E2E tests --- // TestOKR_ProgressUpdateDryRun validates +progress-update dry-run output contains the correct method and API path. @@ -169,6 +217,7 @@ func TestOKR_ProgressUpdateDryRun(t *testing.T) { "okr", "+progress-update", "--progress-id", "123456789", "--content", `{"blocks":[{"type":"text","text":"updated progress"}]}`, + "--style", "richtext", "--dry-run", }, }) @@ -191,6 +240,7 @@ func TestOKR_ProgressUpdateDryRun_WithProgress(t *testing.T) { "okr", "+progress-update", "--progress-id", "123456789", "--content", `{"blocks":[{"type":"text","text":"updated progress"}]}`, + "--style", "richtext", "--progress-percent", "100", "--progress-status", "done", "--dry-run", diff --git a/tests/cli_e2e/okr/okr_shortcuts_test.go b/tests/cli_e2e/okr/okr_shortcuts_test.go index eb39fb424..2c83df3b4 100644 --- a/tests/cli_e2e/okr/okr_shortcuts_test.go +++ b/tests/cli_e2e/okr/okr_shortcuts_test.go @@ -159,6 +159,113 @@ func TestOKR_WeightDryRun_KR(t *testing.T) { assert.True(t, strings.Contains(output, "789"), "dry-run should contain objective-id, got: %s", output) } +// --- Dry-run E2E tests for +patch --- + +// TestOKR_PatchDryRun_Objective validates +patch dry-run for objective with content. +func TestOKR_PatchDryRun_Objective(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+patch", + "--level", "objective", + "--target-id", "123", + "--content", `{"text":"updated content","mention":["ou_123"]}`, + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "PATCH"), "dry-run should contain PATCH method, got: %s", output) + assert.True(t, strings.Contains(output, "/open-apis/okr/v2/objectives/123"), "dry-run should contain objective API path, got: %s", output) + assert.True(t, strings.Contains(output, "content=true"), "dry-run should show content patch, got: %s", output) +} + +// TestOKR_PatchDryRun_Objective_AllFields validates +patch dry-run for objective with all fields. +func TestOKR_PatchDryRun_Objective_AllFields(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+patch", + "--level", "objective", + "--target-id", "456", + "--style", "simple", + "--content", `{"text":"new content"}`, + "--notes", `{"text":"new notes"}`, + "--score", "0.7", + "--deadline", "1735776000000", + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "/open-apis/okr/v2/objectives/456"), "dry-run should contain objective API path, got: %s", output) + assert.True(t, strings.Contains(output, "content=true"), "dry-run should show content patch, got: %s", output) + assert.True(t, strings.Contains(output, "notes=true"), "dry-run should show notes patch, got: %s", output) + assert.True(t, strings.Contains(output, "score=true"), "dry-run should show score patch, got: %s", output) + assert.True(t, strings.Contains(output, "deadline=true"), "dry-run should show deadline patch, got: %s", output) + assert.True(t, strings.Contains(output, `"user_id_type": "open_id"`), "dry-run should contain user_id_type param, got: %s", output) +} + +// TestOKR_PatchDryRun_KeyResult validates +patch dry-run for key result. +func TestOKR_PatchDryRun_KeyResult(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+patch", + "--level", "key-result", + "--target-id", "789", + "--score", "0.5", + "--user-id-type", "user_id", + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "PATCH"), "dry-run should contain PATCH method, got: %s", output) + assert.True(t, strings.Contains(output, "/open-apis/okr/v2/key_results/789"), "dry-run should contain key_result API path, got: %s", output) + assert.True(t, strings.Contains(output, "score=true"), "dry-run should show score patch, got: %s", output) + assert.True(t, strings.Contains(output, `"user_id_type": "user_id"`), "dry-run should contain user_id_type param, got: %s", output) +} + +// TestOKR_PatchDryRun_KeyResult_RichText validates +patch dry-run for key result with richtext style. +func TestOKR_PatchDryRun_KeyResult_RichText(t *testing.T) { + setDryRunConfigEnv(t) + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + t.Cleanup(cancel) + + result, err := clie2e.RunCmd(ctx, clie2e.Request{ + Args: []string{ + "okr", "+patch", + "--level", "key-result", + "--target-id", "101", + "--style", "richtext", + "--content", `{"blocks":[{"block_element_type":"paragraph","paragraph":{"elements":[{"paragraph_element_type":"textRun","text_run":{"text":"updated"}}]}}]}`, + "--dry-run", + }, + }) + require.NoError(t, err) + result.AssertExitCode(t, 0) + + output := result.Stdout + assert.True(t, strings.Contains(output, "/open-apis/okr/v2/key_results/101"), "dry-run should contain key_result API path, got: %s", output) + assert.True(t, strings.Contains(output, "content=true"), "dry-run should show content patch, got: %s", output) +} + // --- Live E2E tests (require user token, skip otherwise) --- // getTestCycleID returns the test cycle ID from env var, or skips the test. diff --git a/tests/cli_e2e/wiki/helpers_test.go b/tests/cli_e2e/wiki/helpers_test.go index 318a013e5..d711c8252 100644 --- a/tests/cli_e2e/wiki/helpers_test.go +++ b/tests/cli_e2e/wiki/helpers_test.go @@ -5,6 +5,7 @@ package wiki import ( "context" + "errors" "fmt" "strings" "testing" @@ -203,6 +204,11 @@ type wikiNodeInfo struct { ObjType string } +const ( + wikiDeleteVisibilityTimeout = 30 * time.Second + wikiDeleteVisibilityPoll = 3 * time.Second +) + // deleteWikiNodeAndVerify removes a wiki node, then polls get_node until the // original node token is gone. Wiki cleanup cannot use drive +delete because // wiki origin nodes need the backing obj_token and parent nodes must delete @@ -333,28 +339,34 @@ func listWikiNodeChildren(ctx context.Context, spaceID, parentNodeToken string) } func waitWikiNodeDeleted(ctx context.Context, nodeToken string) error { - deadline := time.NewTimer(20 * time.Second) - defer deadline.Stop() - ticker := time.NewTicker(time.Second) - defer ticker.Stop() + var lastTransientErr error - for { + opts := clie2e.WaitOptions{ + Timeout: wikiDeleteVisibilityTimeout, + Interval: wikiDeleteVisibilityPoll, + TimeoutError: func() error { + if lastTransientErr != nil { + return fmt.Errorf("wiki node %s delete verification kept hitting transient errors: %w", nodeToken, lastTransientErr) + } + return fmt.Errorf("wiki node %s still exists after delete", nodeToken) + }, + } + + return clie2e.WaitForCondition(ctx, opts, func() (bool, error) { deleted, err := isWikiNodeDeleted(ctx, nodeToken) if err != nil { - return err + if isWikiVerifyTransientError(err) { + lastTransientErr = err + return false, nil + } else { + return false, err + } } if deleted { - return nil + return true, nil } - - select { - case <-ctx.Done(): - return ctx.Err() - case <-deadline.C: - return fmt.Errorf("wiki node %s still exists after delete", nodeToken) - case <-ticker.C: - } - } + return false, nil + }) } func isWikiNodeDeleted(ctx context.Context, nodeToken string) (bool, error) { @@ -375,9 +387,31 @@ func isWikiNodeDeleted(ctx context.Context, nodeToken string) (bool, error) { if isWikiNodeDeletedResult(result) { return true, nil } + if isWikiVerifyTransientResult(result) { + return false, wikiVerifyTransientError{ + err: fmt.Errorf("verify wiki node %s after delete hit transient response: exit=%d stdout=%s stderr=%s", nodeToken, result.ExitCode, result.Stdout, result.Stderr), + } + } return false, fmt.Errorf("verify wiki node %s after delete: exit=%d stdout=%s stderr=%s", nodeToken, result.ExitCode, result.Stdout, result.Stderr) } +type wikiVerifyTransientError struct { + err error +} + +func (e wikiVerifyTransientError) Error() string { + return e.err.Error() +} + +func (e wikiVerifyTransientError) Unwrap() error { + return e.err +} + +func isWikiVerifyTransientError(err error) bool { + var transient wikiVerifyTransientError + return err != nil && errors.As(err, &transient) +} + func wikiAPISuccess(stdout string) bool { if ok := gjson.Get(stdout, "ok"); ok.Exists() { return ok.Bool() @@ -404,6 +438,55 @@ func isWikiNodeDeletedResult(result *clie2e.Result) bool { strings.Contains(combined, "not found") } +func isWikiVerifyTransientResult(result *clie2e.Result) bool { + if result == nil { + return false + } + payload := result.Stdout + if strings.TrimSpace(payload) == "" { + payload = result.Stderr + } + if gjson.Get(payload, "error.type").String() != "internal" || + gjson.Get(payload, "error.subtype").String() != "invalid_response" { + return false + } + message := strings.ToLower(gjson.Get(payload, "error.message").String()) + return strings.Contains(message, "http 429") || + strings.Contains(message, "http 500") || + strings.Contains(message, "http 502") || + strings.Contains(message, "http 503") || + strings.Contains(message, "http 504") +} + +func TestWikiVerifyTransientResult(t *testing.T) { + t.Run("matches invalid response from transient http status", func(t *testing.T) { + result := &clie2e.Result{ + ExitCode: 5, + Stderr: `{"ok":false,"error":{"type":"internal","subtype":"invalid_response","message":"SDK returned an invalid JSON response: failed to parse TAT response (HTTP 429): invalid character 'r' looking for beginning of value"}}`, + } + + require.True(t, isWikiVerifyTransientResult(result)) + }) + + t.Run("does not match unrelated invalid response", func(t *testing.T) { + result := &clie2e.Result{ + ExitCode: 5, + Stderr: `{"ok":false,"error":{"type":"internal","subtype":"invalid_response","message":"SDK returned an invalid JSON response: malformed body"}}`, + } + + require.False(t, isWikiVerifyTransientResult(result)) + }) + + t.Run("does not match api errors", func(t *testing.T) { + result := &clie2e.Result{ + ExitCode: 1, + Stderr: `{"ok":false,"error":{"type":"api","subtype":"conflict","message":"resource contention occurred, please retry","retryable":true}}`, + } + + require.False(t, isWikiVerifyTransientResult(result)) + }) +} + func findWikiNodeByToken(t *testing.T, ctx context.Context, spaceID string, nodeToken string, parentNodeTokens ...string) gjson.Result { t.Helper()