diff --git a/README.md b/README.md new file mode 100644 index 0000000..917338e --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# projectnew + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..3e5a139 --- /dev/null +++ b/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..5243f46 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/src/assets/logo.png differ diff --git a/src/assets/quill_table .css b/src/assets/quill_table .css new file mode 100644 index 0000000..de87dd1 --- /dev/null +++ b/src/assets/quill_table .css @@ -0,0 +1,286 @@ +.ql-editor table { + width: 100%; + border-collapse: collapse; +} + +.ql-editor table td { + border: 1px solid black; + padding: 5px; + height: 25px; +} + +.ql-formats button.ql-table::after, +.ql-formats .ql-picker.ql-table .ql-picker-label::before { + content: " "; + display: block; + width: 18px; + height: 18px; + background-repeat: no-repeat; + background-size: contain; +} + +.ql-picker.ql-table .ql-picker-label::before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABcSURBVEhL3YsxDgBACML8/6fvNhd0aGCyCUuBOsULR5hGToStSHl8oB4fqMcH6rtIRZhGToStSHl8oB4fqMcH6rtIRZhGToStSHl8oB4fqMcH6rtIRZhGTk5Q9QFCcv8BMZAsCwAAAABJRU5ErkJggg=='); +} + +button.ql-table[value="append-row"]::after { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC5SURBVEhL7ZNBCsIwFERzKxceQHGjqLcSFMHzKOpN1BOIe53BDgxJCjbRlX3woJnf/F9KEnq6MIE3+KyUPcYw4QpzG0q8wAQVa2nt0w8QfzpgCU/w0XiEc5ij84ANVC2WtRjVEuKLtoP8cs+EZzO4jbLsReP1ZkEvDeHZ1lR4doADW7PHCH4E/zc3tcHa/f1Yxs8H8LSwiRSe7RmUsoDeTHg2ZVDDGnpDdwW/Ao8iT4suGp+Z9dQSwgttSY+8S9IcOwAAAABJRU5ErkJggg=='); +} + +button.ql-table[value="append-col"] { + padding-top: 0; +} + +button.ql-table[value="append-col"]::after { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADXSURBVEhL3ZVLCsJADIbnVi48gOJGUW8lqCuPo6g3UU8g7vX/GQMhnUdmUZR+8MGQyaOUlIbBMYMP+K7InCls5g5TDVPeYDNSXMOb1+FvBuzhKB7b8A5Ywwt8fT3DJaziGbCDkmflXRFJzMEn1w0FHVswkMMWWq5QNxN07MRADlto4fsu3fPuGY9pfj6A2yI5Ok/HjgzksIWWFdTNBB2bM5DDFqbYQt1Qu4FFJLEGV5HbIh8az8X1FLwDDnAcj214B3jzOvQ+oPcfDn+DLEw11DJnAgdPCB8kS4+90nxt3AAAAABJRU5ErkJggg=='); +} + +.ql-table, +.ql-contain { + width: auto !important; + margin-right: 0; +} + +.ql-picker.ql-table { + font-size: 11px; + font-weight: normal; +} + +.ql-picker.ql-table svg { + display: none; +} + +.ql-picker.ql-table .ql-picker-label { + padding: 2px 3px; +} + +.ql-picker.ql-table .ql-picker-options { + width: 178px; +} + +.ql-picker.ql-table .ql-picker-item { + display: block; + float: left; + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + padding: 0px; + margin: 1px; +} + +.ql-picker.ql-table .ql-picker-item { + border: 1px solid #444; + color: #444; +} + +.ql-picker.ql-table .ql-picker-item:hover { + border-color: #06c; +} + +.ql-picker-item:nth-child(5):before { + clear: both; + display: block; + content: ""; + width: 100%; +} + +.ql-picker-item[data-value=newtable_1_1]:before { + content: "1x1"; +} + +.ql-picker-item[data-value=newtable_1_2]:before { + content: "1x2"; +} + +.ql-picker-item[data-value=newtable_1_3]:before { + content: "1x3"; +} + +.ql-picker-item[data-value=newtable_1_4]:before { + content: "1x4"; +} + +.ql-picker-item[data-value=newtable_1_5]:before { + content: "1x5"; +} + +.ql-picker-item[data-value=newtable_2_1]:before { + content: "2x1"; +} + +.ql-picker-item[data-value=newtable_2_2]:before { + content: "2x2"; +} + +.ql-picker-item[data-value=newtable_2_3]:before { + content: "2x3"; +} + +.ql-picker-item[data-value=newtable_2_4]:before { + content: "2x4"; +} + +.ql-picker-item[data-value=newtable_2_5]:before { + content: "2x5"; +} + +.ql-picker-item[data-value=newtable_3_1]:before { + content: "3x1"; +} + +.ql-picker-item[data-value=newtable_3_2]:before { + content: "3x2"; +} + +.ql-picker-item[data-value=newtable_3_3]:before { + content: "3x3"; +} + +.ql-picker-item[data-value=newtable_3_4]:before { + content: "3x4"; +} + +.ql-picker-item[data-value=newtable_3_5]:before { + content: "3x5"; +} + +.ql-picker-item[data-value=newtable_4_1]:before { + content: "4x1"; +} + +.ql-picker-item[data-value=newtable_4_2]:before { + content: "4x2"; +} + +.ql-picker-item[data-value=newtable_4_3]:before { + content: "4x3"; +} + +.ql-picker-item[data-value=newtable_4_4]:before { + content: "4x4"; +} + +.ql-picker-item[data-value=newtable_4_5]:before { + content: "4x5"; +} + +.ql-picker-item[data-value=newtable_5_1]:before { + content: "5x1"; +} + +.ql-picker-item[data-value=newtable_5_2]:before { + content: "5x2"; +} + +.ql-picker-item[data-value=newtable_5_3]:before { + content: "5x3"; +} + +.ql-picker-item[data-value=newtable_5_4]:before { + content: "5x4"; +} + +.ql-picker-item[data-value=newtable_5_5]:before { + content: "5x5"; +} + +.ql-picker-item[data-value=newtable_6_1]:before { + content: "6x1"; +} + +.ql-picker-item[data-value=newtable_6_2]:before { + content: "6x2"; +} + +.ql-picker-item[data-value=newtable_6_3]:before { + content: "6x3"; +} + +.ql-picker-item[data-value=newtable_6_4]:before { + content: "6x4"; +} + +.ql-picker-item[data-value=newtable_6_5]:before { + content: "6x5"; +} + +.ql-picker-item[data-value=newtable_7_1]:before { + content: "7x1"; +} + +.ql-picker-item[data-value=newtable_7_2]:before { + content: "7x2"; +} + +.ql-picker-item[data-value=newtable_7_3]:before { + content: "7x3"; +} + +.ql-picker-item[data-value=newtable_7_4]:before { + content: "7x4"; +} + +.ql-picker-item[data-value=newtable_7_5]:before { + content: "7x5"; +} + +.ql-picker-item[data-value=newtable_8_1]:before { + content: "8x1"; +} + +.ql-picker-item[data-value=newtable_8_2]:before { + content: "8x2"; +} + +.ql-picker-item[data-value=newtable_8_3]:before { + content: "8x3"; +} + +.ql-picker-item[data-value=newtable_8_4]:before { + content: "8x4"; +} + +.ql-picker-item[data-value=newtable_8_5]:before { + content: "8x5"; +} + +.ql-picker-item[data-value=newtable_9_1]:before { + content: "9x1"; +} + +.ql-picker-item[data-value=newtable_9_2]:before { + content: "9x2"; +} + +.ql-picker-item[data-value=newtable_9_3]:before { + content: "9x3"; +} + +.ql-picker-item[data-value=newtable_9_4]:before { + content: "9x4"; +} + +.ql-picker-item[data-value=newtable_9_5]:before { + content: "9x5"; +} + +.ql-picker-item[data-value=newtable_10_1]:before { + content: "10x1"; +} + +.ql-picker-item[data-value=newtable_10_2]:before { + content: "10x2"; +} + +.ql-picker-item[data-value=newtable_10_3]:before { + content: "10x3"; +} + +.ql-picker-item[data-value=newtable_10_4]:before { + content: "10x4"; +} + +.ql-picker-item[data-value=newtable_10_5]:before { + content: "10x5"; +} diff --git a/src/components/wang.vue b/src/components/wang.vue new file mode 100644 index 0000000..0b518a6 --- /dev/null +++ b/src/components/wang.vue @@ -0,0 +1,421 @@ + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..93a5d6c --- /dev/null +++ b/src/main.js @@ -0,0 +1,55 @@ +import Vue from 'vue' +import App from './App.vue' +import axios from 'axios'; + +Vue.prototype.$axios = axios; +Vue.config.productionTip = false + +// axios.defaults.baseURL = 'http://localhost:3000'; +axios.defaults.baseURL = 'http://192.168.31.181:3000'; +// axios.defaults.baseURL = 'https://api.example.com'; + +// 可以在此处配置请求头、超时等 +axios.defaults.headers.common['Authorization'] = 'Bearer token'; +axios.defaults.timeout = 10000; + + +window.handleMessageFromDotNet = function(msg) { + Vue.prototype.$dotNetMessage = msg + // 可以触发全局事件 + const event = new CustomEvent('dotnet-message', { detail: msg }) + window.dispatchEvent(event) +} + + +export const sendToDotNet = (type, payload) => { + if (!window.chrome?.webview?.postMessage) { + console.error('WebView2 环境未就绪!当前环境:', window.chrome ? '有chrome对象' : '无chrome对象'); + return; + } + // const message = JSON.stringify(type, payload) + // console.log("开始给C#发送的信息",message) + + let message = { + // 'Type':'', + 'Payload':payload + } + console.log("传参",message,JSON.stringify(message)) + window.chrome.webview.postMessage(message) + // if (window.chrome?.webview?.postMessage) { + // const message = JSON.stringify({ type, payload }) + // console.log("开始给C#发送的信息",message) + // window.chrome.webview.postMessage(message) + // } else { + // console.warn('WebView2环境未就绪') + // // 可选:开发环境模拟 + // if (process.env.NODE_ENV === 'development') { + // console.log('[模拟发送]', { type, payload }) + // } + // } +} + +Vue.prototype.$sendToDotNet = sendToDotNet +new Vue({ + render: h => h(App), +}).$mount('#app') diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..8306d5d --- /dev/null +++ b/vue.config.js @@ -0,0 +1,18 @@ +const { defineConfig } = require('@vue/cli-service') +module.exports = defineConfig({ + transpileDependencies: true +}) + +module.exports = { + devServer: { + proxy: { + '/api': { + target: 'http://youneed.top:10017', + changeOrigin: true, + pathRewrite: { + '^/api': '' + } + } + } + } +}; \ No newline at end of file