Repository: Tencent/tdesign-mobile-vue (ts)

Issue:
[t-swiper] 滑动会触发onClick
### tdesign-mobile-vue 版本

1.0.6

### 重现链接

_No response_

### 重现步骤

	<t-swiper :autoplay="true" :height="swiperHeight+'px'"
			:navigation="{ type: 'fraction', paginationPosition: 'bottom-right' }" @change="handleChange" @click="toArticle">
			<t-swiper-item v-for="(item, index) in news" :key="index">
				<t-image class="image-container" :src="item.extractedImg[0]" shape="round"
					:style="{height:picHeight+'px'}" fit="cover" />
				<div style="height:30px;font-size:14px;line-height:15px;overflow:hidden;background-color:#FFFFFF;">
					【媒体关注】{{item.title}}</div>

			</t-swiper-item>
		</t-swiper>

### 期望结果

左右滑动正常切换，点击才触发toArticle

### 实际结果

左右滑动时，即触发toArticle

### 框架版本

Vue(3.3.8)

### 浏览器版本

Microsoft Edge 版本 118.0.2088.69 (正式版本) (64 位)

### 系统版本

windows10

### Node版本

v16.14.2

### 补充说明

_No response_
## IssueShoot
- 预估时长: 1
- 期望完成时间: 2023-12-11 00:00:00 +0000 UTC
- 开发难度: 低
- 参与人数: 1
- 需求对接人: anlyyao
- 验收标准: 实现期望改造效果，提 PR 并通过验收无误
- 备注: 最终激励以实际提交 `pull request` 并合并为准

Pull request description:
fix(swiper): 滑动会触发onClick问题修复
<!--
首先，感谢你的贡献！😄
请阅读并遵循 [TDesign 贡献指南](https://github.com/Tencent/tdesign/blob/main/docs/contributing.md)，填写以下 pull request 的信息。
PR 在维护者审核通过后会合并，谢谢！
-->

### 🤔 这个 PR 的性质是？

- [x] 日常 bug 修复
- [ ] 新特性提交
- [ ] 文档改进
- [ ] 演示代码改进
- [ ] 组件样式/交互改进
- [ ] CI/CD 改进
- [ ] 重构
- [ ] 代码风格优化
- [ ] 测试用例
- [ ] 分支合并
- [ ] 其他

### 🔗 相关 Issue

<!--
1. 描述相关需求的来源，如相关的 issue 讨论链接。
-->
fix #1169
### 💡 需求背景和解决方案

1. 要解决的具体问题
滑动时，不触发click事件
2. 列出最终的 API 实现和用法
useSwipe函数改用swipe-cell组件的
可以解决@vueuse的useSwipe方法在关闭passive后，无法获取click事件的问题

### 📝 更新日志

<!--
从用户角度描述具体变化，以及可能的 breaking change 和其他风险。
-->

- fix(Swiper): 修复滑动场景下触发onClick的问题

- [ ] 本条 PR 不需要纳入 Changelog

### ☑️ 请求合并前的自查清单

⚠️ 请自检并全部**勾选全部选项**。⚠️

- [x] 文档已补充或无须补充
- [x] 代码演示已提供或无须提供
- [x] TypeScript 定义已补充或无须补充
- [x] Changelog 已提供或无须提供


Patch:
diff --git a/src/action-sheet/action-sheet.vue b/src/action-sheet/action-sheet.vue
index d17c7753..c18a4d65 100644
--- a/src/action-sheet/action-sheet.vue
+++ b/src/action-sheet/action-sheet.vue
@@ -39,7 +39,7 @@ export default defineComponent({
     ActionSheetGrid,
   },
   props: ActionSheetProps,
-  emits: ['selected', 'update:modelValue', 'cancel', 'close'],
+  emits: ['selected', 'update:modelValue', 'cancel', 'close', 'update:visible'],
   setup(props: any, context) {
     const actionItems = computed(() => {
       return props.items.map((item: String | ActionSheetItem) => {
diff --git a/src/cascader/cascader.en-US.md b/src/cascader/cascader.en-US.md
index 5fe0241e..8d7306d4 100644
--- a/src/cascader/cascader.en-US.md
+++ b/src/cascader/cascader.en-US.md
@@ -15,6 +15,7 @@ title | String / Slot / Function | - | Typescript：`string \| TNode`。[see mor
 value | String / Number | - | `v-model` and `v-model:value` is supported | N
 defaultValue | String / Number | - | uncontrolled property | N
 visible | Boolean | false | \- | N
+checkStrictly | Boolean | false | \- | N
 placeholder | String / Slot / Function | - | Typescript：`string \| TNode`。[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/blob/develop/src/common.ts) | N
 onChange | Function |  | Typescript：`(value: string \| number, selectedOptions: string[]) => void`<br/> | N
 onClose | Function |  | Typescript：`(trigger: TriggerSource) => void`<br/>[see more ts definition](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/cascader/type.ts)。<br/>`type TriggerSource = 'overlay' \| 'close-btn' \| 'finish'`<br/> | N
diff --git a/src/cascader/cascader.md b/src/cascader/cascader.md
index a1909c90..571d6618 100644
--- a/src/cascader/cascader.md
+++ b/src/cascader/cascader.md
@@ -14,6 +14,7 @@ title | String / Slot / Function | - | 标题。TS 类型：`string \| TNode`。
 value | String / Number | - | 选项值。支持语法糖 `v-model` 或 `v-model:value` | N
 defaultValue | String / Number | - | 选项值。非受控属性 | N
 visible | Boolean | false | 是否展示 | N
+checkStrictly | Boolean | false | 父子节点选中状态不再关联，可各自选中或取消 | N
 placeholder | String / Slot / Function | 选择选项 | 未选中时的提示文案。TS 类型：`string \| TNode`。[通用类型定义](https://github.com/Tencent/tdesign-mobile-vue/blob/develop/src/common.ts) | N
 onChange | Function |  | TS 类型：`(value: string \| number, selectedOptions: string[]) => void`<br/>值发生变更时触发 | N
 onClose | Function |  | TS 类型：`(trigger: TriggerSource) => void`<br/>关闭时触发。[详细类型定义](https://github.com/Tencent/tdesign-mobile-vue/tree/develop/src/cascader/type.ts)。<br/>`type TriggerSource = 'overlay' \| 'close-btn' \| 'finish'`<br/> | N
diff --git a/src/cascader/cascader.vue b/src/cascader/cascader.vue
index dfd08b85..aadadd01 100644
--- a/src/cascader/cascader.vue
+++ b/src/cascader/cascader.vue
@@ -259,11 +259,25 @@ export default defineComponent({
     );
 
     const close = (trigger: string) => {
+      if (props.checkStrictly) onCloseChange();
       props.onClose?.({ trigger });
     };
 
-    const onVisibleChange = (visible: boolean) => {
-      close('overlay');
+    const onVisibleChange = (visible: boolean, e?: any) => {
+      if (e?.trigger === 'overlay') close('overlay');
+    };
+
+    const onCloseChange = () => {
+      if (!stepIndex.value) {
+        setCascaderValue('', []);
+      } else {
+        const item = items[stepIndex.value - 1][selectedIndexes[stepIndex.value - 1]];
+
+        setCascaderValue(
+          item[(keys as Ref<KeysType>).value?.value ?? 'value'],
+          items.slice(0, stepIndex.value).map((item, index) => toRaw(item?.[selectedIndexes[index]])),
+        );
+      }
     };
 
     const onClose = () => {
diff --git a/src/cascader/props.ts b/src/cascader/props.ts
index 67c8f635..dedacc5b 100644
--- a/src/cascader/props.ts
+++ b/src/cascader/props.ts
@@ -59,6 +59,11 @@ export default {
   },
   /** 是否展示 */
   visible: Boolean,
+  /** 父子节点选中状态不再关联，可各自选中或取消 */
+  checkStrictly: {
+    type: Boolean,
+    default: false,
+  },
   /** 值发生变更时触发 */
   onChange: Function as PropType<TdCascaderProps['onChange']>,
   /** 关闭时触发 */
diff --git a/src/slider/demos/step.vue b/src/slider/demos/step.vue
index 1950de47..590f5086 100644
--- a/src/slider/demos/step.vue
+++ b/src/slider/demos/step.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="wrapper">
-    <t-slider v-model="value" :marks="marks" :step="20" />
+    <t-slider v-model="value" :marks="marksRange" :min="5" :max="10" :step="0.5" />
   </div>
 
   <div class="wrapper">
@@ -11,7 +11,15 @@
 <script lang="ts" setup>
 import { ref } from 'vue';
 
-const value = ref(60);
+const value = ref(6.5);
+const marksRange = ref({
+  5: '5',
+  6: '6',
+  7: '7',
+  8: '8',
+  9: '9',
+  10: '10',
+});
 const marks = ref({
   0: '0',
   20: '20',
diff --git a/src/slider/slider.vue b/src/slider/slider.vue
index e88aef23..77b96a89 100644
--- a/src/slider/slider.vue
+++ b/src/slider/slider.vue
@@ -217,6 +217,14 @@ export default defineComponent({
       },
     ]);
 
+    const precision = computed(() => {
+      const precisions = [min.value, max.value, step.value].map((item) => {
+        const decimalArr = `${item}`.split('.');
+        return decimalArr[1] ? decimalArr[1].length : 0;
+      });
+      return Math.max.apply(null, precisions);
+    });
+
     const lineBarWidth = ref<number>();
     const setSingleBarWidth = (value: number) => {
       const halfBlock = theme.value === 'capsule' ? Number(state.blockSize) / 2 : 0;
@@ -276,8 +284,7 @@ export default defineComponent({
       if (disabled.value) return;
       const [{ pageX }] = e.changedTouches;
       const value = convertPosToValue(pageX - state.initialLeft);
-
-      changeValue(value);
+      changeValue(calcByStep(value));
     };
 
     const changeValue = (value: SliderValue) => {
@@ -285,10 +292,10 @@ export default defineComponent({
     };
 
     const calcByStep = (value: number): number => {
-      if (step.value < 1 || step.value > scope.value) return value;
+      if (step.value < 0 || step.value > scope.value) return Number(parseFloat(`${value}`).toFixed(precision.value));
       const closestStep = trimSingleValue(Math.round(value / step.value) * step.value, min.value, max.value);
 
-      return closestStep as number;
+      return Number(parseFloat(`${closestStep}`).toFixed(precision.value));
     };
 
     const getValue = (label: any, value: any) => {
@@ -324,7 +331,8 @@ export default defineComponent({
       const raw = isLeft
         ? (posValue / state.maxRange) * scope.value + min.value
         : max.value - (posValue / state.maxRange) * scope.value;
-      return Math.round(raw);
+
+      return raw;
     };
 
     const onTouchMoveLeft = (e: TouchEvent) => {
@@ -353,7 +361,7 @@ export default defineComponent({
       if (!sliderLine.value) return;
       const currentLeft = e.clientX - state.initialLeft;
       const value = convertPosToValue(currentLeft);
-      changeValue(value);
+      changeValue(calcByStep(value));
     };
 
     const onLineClick = (e: MouseEvent) => {
diff --git a/src/swiper/swiper.vue b/src/swiper/swiper.vue
index 9f20e62b..9848130f 100644
--- a/src/swiper/swiper.vue
+++ b/src/swiper/swiper.vue
@@ -10,6 +10,7 @@
         height: containerHeight,
       }"
       @transitionend.self="handleAnimationEnd"
+      @click="onItemClick"
     >
       <slot />
     </div>
@@ -63,9 +64,9 @@ import {
   watch,
   onUnmounted,
 } from 'vue';
-import { useSwipe } from '@vueuse/core';
 import isObject from 'lodash/isObject';
 import isNumber from 'lodash/isNumber';
+import { useSwipe } from '../swipe-cell/useSwipe';
 
 import config from '../config';
 import SwiperProps from './props';
@@ -181,10 +182,8 @@ const processIndex = (index: number, source: SwiperChangeSource) => {
 };
 
 const { lengthX, lengthY } = useSwipe(swiperContainer, {
-  passive: false,
   onSwipeStart() {
     if (disabled.value || isSwiperDisabled.value || !items.value.length) return;
-    onItemClick(); // use touchstart to simulate click on swipe start
     stopAutoplay();
   },
   onSwipe(e: TouchEvent) {
diff --git a/src/table/demos/scroll.vue b/src/table/demos/scroll.vue
index 46413314..a2d65878 100644
--- a/src/table/demos/scroll.vue
+++ b/src/table/demos/scroll.vue
@@ -2,7 +2,6 @@
   <div>
     <t-table
       row-key="index"
-      layout-table="auto"
       :data="data"
       :columns="columns"
       :show-header="showHeader"


Test patch:
diff --git a/src/table/__test__/__snapshots__/demo.test.jsx.snap b/src/table/__test__/__snapshots__/demo.test.jsx.snap
index c1ca873e..3bbbb893 100644
--- a/src/table/__test__/__snapshots__/demo.test.jsx.snap
+++ b/src/table/__test__/__snapshots__/demo.test.jsx.snap
@@ -1590,7 +1590,6 @@ exports[`Table > Table mobileVue demo works fine 1`] = `
       <div>
         <div
           class="t-table t-vertical-align-middle"
-          layout-table="auto"
           style="position: relative;"
         >
           <div
@@ -2885,7 +2884,6 @@ exports[`Table > Table scrollVue demo works fine 1`] = `
 <div>
   <div
     class="t-table t-vertical-align-middle"
-    layout-table="auto"
     style="position: relative;"
   >
     <div