arms-app 1.0.75 → 1.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/view/1.d +105 -0
  3. package/view/5.d +0 -106
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arms-app",
3
- "version": "1.0.75",
3
+ "version": "1.0.76",
4
4
  "description": "一个基于 Express 的 Web 应用1",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/view/1.d ADDED
@@ -0,0 +1,105 @@
1
+ <template>
2
+ <el-dialog
3
+ :title="title"
4
+ :visible.sync="innerVisible"
5
+ :close-on-click-modal="false"
6
+ @closed="onClosed"
7
+ >
8
+ <el-form
9
+ ref="form"
10
+ :model="form"
11
+ :rules="rules"
12
+ label-width="90px"
13
+ >
14
+ <el-form-item label="姓名" prop="name">
15
+ <el-input v-model="form.name" />
16
+ </el-form-item>
17
+
18
+ <el-form-item label="邮箱" prop="email">
19
+ <el-input v-model="form.email" />
20
+ </el-form-item>
21
+ </el-form>
22
+
23
+ <span slot="footer">
24
+ <el-button @click="innerVisible = false">取消</el-button>
25
+ <el-button type="primary" :loading="submitting" @click="submit">确定</el-button>
26
+ </span>
27
+ </el-dialog>
28
+ </template>
29
+
30
+ <script>
31
+ export default {
32
+ name: "FormDialog",
33
+ props: {
34
+ // 父组件 v-model
35
+ value: { type: Boolean, default: false },
36
+ title: { type: String, default: "表单" },
37
+
38
+ // 初始数据(编辑时传 row)
39
+ initialData: { type: Object, default: () => ({}) }
40
+ },
41
+ data() {
42
+ return {
43
+ innerVisible: false,
44
+ submitting: false,
45
+ form: { name: "", email: "" },
46
+ rules: {
47
+ name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
48
+ email: [
49
+ { required: true, message: "请输入邮箱", trigger: "blur" },
50
+ { type: "email", message: "邮箱格式不正确", trigger: "blur" }
51
+ ]
52
+ }
53
+ };
54
+ },
55
+ watch: {
56
+ // 父 -> 子
57
+ value: {
58
+ immediate: true,
59
+ handler(v) {
60
+ this.innerVisible = v;
61
+ if (v) this.resetFromInitial();
62
+ }
63
+ },
64
+ // 子 -> 父(保证父组件状态同步)
65
+ innerVisible(v) {
66
+ this.$emit("input", v);
67
+ },
68
+ // 如果父组件换了 initialData,且弹窗开着,就刷新表单
69
+ initialData: {
70
+ deep: true,
71
+ handler() {
72
+ if (this.innerVisible) this.resetFromInitial();
73
+ }
74
+ }
75
+ },
76
+ methods: {
77
+ resetFromInitial() {
78
+ const base = { name: "", email: "" };
79
+ this.form = Object.assign({}, base, this.initialData);
80
+ this.$nextTick(() => {
81
+ this.$refs.form && this.$refs.form.clearValidate();
82
+ });
83
+ },
84
+
85
+ onClosed() {
86
+ // 关掉后清理,避免下次打开残留
87
+ this.resetFromInitial();
88
+ this.$emit("closed");
89
+ },
90
+
91
+ submit() {
92
+ this.$refs.form.validate((valid) => {
93
+ if (!valid) return;
94
+ this.submitting = true;
95
+
96
+ // 把数据交给父组件处理;父组件成功后调用 done() 关闭
97
+ const done = () => (this.innerVisible = false);
98
+ this.$emit("submit", { ...this.form }, done);
99
+
100
+ this.submitting = false;
101
+ });
102
+ }
103
+ }
104
+ };
105
+ </script>
package/view/5.d DELETED
@@ -1,106 +0,0 @@
1
- <template>
2
- <section class="number-input-page">
3
- <h1>数字输入示例</h1>
4
- <p>请输入非负数字,最多两位小数:</p>
5
- <div class="inputs-row">
6
- <div class="input-item">
7
- <span class="label">输入框 1:</span>
8
- <el-input
9
- v-model="value1"
10
- placeholder="请输入数值"
11
- clearable
12
- @input="handleInput1"
13
- />
14
- </div>
15
- <div class="input-item">
16
- <span class="label">输入框 2:</span>
17
- <el-input
18
- v-model="value2"
19
- placeholder="请输入数值"
20
- clearable
21
- @input="handleInput2"
22
- />
23
- </div>
24
- <el-button type="primary" @click="onSearch">搜索</el-button>
25
- </div>
26
- <p class="preview">
27
- 输入框1:{{ value1 || '(空)' }},
28
- 输入框2:{{ value2 || '(空)' }}
29
- </p>
30
- </section>
31
- </template>
32
-
33
- <script>
34
- export default {
35
- name: "NumberInputView",
36
- data() {
37
- return {
38
- value1: "",
39
- value2: "",
40
- };
41
- },
42
- methods: {
43
- normalizeNumber(val) {
44
- let v = String(val);
45
- v = v.replace(/[^\d.]/g, "");
46
- const dotIndex = v.indexOf(".");
47
- if (dotIndex !== -1) {
48
- v =
49
- v.slice(0, dotIndex + 1) + v.slice(dotIndex + 1).replace(/\./g, "");
50
- }
51
- if (v.startsWith(".")) {
52
- v = "0" + v;
53
- }
54
- v = v.replace(/^0+(\d)/, "$1");
55
- v = v.replace(/^(\d+)(\.\d{0,2}).*$/, "$1$2");
56
- return v;
57
- },
58
- handleInput1(val) {
59
- this.value1 = this.normalizeNumber(val);
60
- },
61
- handleInput2(val) {
62
- this.value2 = this.normalizeNumber(val);
63
- },
64
- onSearch() {
65
- if (!this.value1 || !this.value2) {
66
- this.$message.warning("请先输入两个数字");
67
- return;
68
- }
69
- const n1 = parseFloat(this.value1);
70
- const n2 = parseFloat(this.value2);
71
- if (Number.isNaN(n1) || Number.isNaN(n2)) {
72
- this.$message.error("输入的内容不是有效数字");
73
- return;
74
- }
75
- if (n1 > n2) {
76
- this.$message.error("输入框1的值不能大于输入框2,且输入框2不能小于输入框1");
77
- return;
78
- }
79
- this.$message.success("校验通过");
80
- },
81
- },
82
- };
83
- </script>
84
-
85
- <style scoped>
86
- .number-input-page {
87
- padding: 24px;
88
- }
89
- .preview {
90
- margin-top: 12px;
91
- }
92
- .inputs-row {
93
- display: flex;
94
- align-items: center;
95
- gap: 12px;
96
- margin-top: 12px;
97
- }
98
- .input-item {
99
- display: flex;
100
- align-items: center;
101
- gap: 4px;
102
- }
103
- .label {
104
- white-space: nowrap;
105
- }
106
- </style>