1. フロントエンド
プロジェクトリストはwx:for traversalを使用して表示されます
各プロジェクト表示には 3 つのモジュールがあります
1. プロジェクトのタイトル
2. プロジェクトの内容
3.プロジェクトフット
すべてのコードは次のとおりです
<t-sticky>
<view class="search">
<t-search model:value="{
{conditions.keyword}}" placeholder="输入 户名 手机号 省份 城市 查询" center bind:change="inputKeyword" bind:clear="clearKeyword" bind:submit="doSearch" />
</view>
<t-dropdown-menu>
<t-dropdown-item label="选择状态" optionsColumns="2" options="{
{workflows}}" value="{
{conditions.selectedWorkflows}}" bindchange="selectWorkflow" bindconfirm="confirmSelectWorkflow" default-value="{
{conditions.selectedWorkflows}}" multiple />
<t-dropdown-item label="选择城市" bindchange="selectCity" bindconfirm="confirmSelectCity" optionsColumns="3" options="{
{cities}}" value="{
{conditions.selectedCities}}" default-value="{
{conditions.selectedCities}}" multiple />
<t-dropdown-item label="选择用户" bindchange="selectUser" bindconfirm="confirmSelectUser" wx:if="{
{user.admin}}" optionsColumns="3" options="{
{users}}" value="{
{conditions.selectedUsers}}" default-value="{
{conditions.selectedUsers}}" multiple />
</t-dropdown-menu>
</t-sticky>
<list-rack length="{
{records.length}}" loading="{
{loading}}" list-end="{
{dataEnd}}">
<block wx:for="{
{records}}" wx:key="id">
<view class="project-title">
<view class="left">#{
{item.serialNo}}</view>
<view class="right" bind:tap="onAction" data-id="{
{item.id}}">
<t-icon name="ellipsis" size="48rpx" />
</view>
</view>
<view class="project-content">
<view class="basic-info" bind:tap="view">
<view class="left">
<view>
<text class="name" data-id="{
{item.id}}">{
{item.name}}</text>
<text class="phone">{
{item.phone}}</text>
</view>
<view class="city">{
{item.province}}-{
{item.city}}</view>
</view>
<view class="right">
<t-tag class="margin-16" theme="success" variant="light" size="large">
{
{item.workflow}}
</t-tag>
</view>
</view>
<view class="address">
{
{item.address}}
</view>
</view>
<view class="project-foot">
<view class="left">业务员:{
{item.userName}} 工程人员: {
{item.builderName}}</view>
<view class="right">{
{item.createAt}}</view>
</view>
</block>
</list-rack>
<t-action-sheet id="t-action-sheet" bind:selected="handleAction" />
<t-fab icon="add" bind:click="addProject" text="项目"></t-fab>
クリックして削除する機能は次のように定義されています。
プロジェクト名
bind:tap では、クリックされたときにトリガーされるonAction(e)メソッドにバインドされており 、カスタム属性 data-id は現在のプロジェクトの ID 値にバインドされています。
jsページは次のとおりです。
すべての JS コードについて、onAction(e)メソッドを探します。
import Project from '../../../api/project'
import ActionSheet, { ActionSheetTheme } from '../../../miniprogram_npm/tdesign-miniprogram/action-sheet/index';
import I18n from '../../../i18n/index'
import PageList from '../../../behaviors/page-list'
Page({
behaviors: [I18n, PageList],
/**
* 页面的初始数据
*/
data: {
workflows: [],
cities: [],
users: [],
conditions: {
keyword: null,
selectedWorkflows: [],
selectedCities: [],
selectedUsers: [],
pageSize: 20,
currentPage: 1
},
project: [],
user: {},
true: true
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
console.log("project index onload:。。。。")
let self = this
//城市列表数据从Project归属地中查询
Project.findAllCities().then((res) => {
console.log("获取到城市有:" + res.data)
let cs = res.data.map(city => {
return {
value: city,
label: city
}
})
self.setData({
cities: cs
})
})
//用户列表数据从Project所有userId中查询
Project.findAllUsers().then((res) => {
console.log("获取到的user有:" + res.data)
let rcds = res.data.map((rd) => {
return {
value: rd.id,
label: rd.name
}
})
self.setData({
users: rcds
})
})
//设置审核状态
this.setData({
//新的/审核信息不完整(newly),待审核(apply),审核通过(approved)/挂起(pending);
//施工中/整改(building), 施工验收(builded-check)验收通过(check-passed),项目完成(finish)
workflows: [{
value: 'newly',
label: this.$t('projectWorkflowNewly')
},
{
value: 'apply',
label: this.$t('projectWorkflowApply')
},
{
value: 'approved',
label: this.$t('projectWorkflowApproved')
},
{
value: 'building',
label: this.$t('projectWorkflowBuilding')
},
{
value: 'builded-check',
label: this.$t('projectWorkflowBuildedCheck')
},
{
value: 'check-passed',
label: this.$t('projectWorkflowCheckPassed')
},
{
value: 'finish',
label: this.$t('projectWorkflowFinish')
},
{
value: 'pending',
label: this.$t('projectWorkflowPending')
}
]
});
this.setData({
user: getApp().globalData.user
})
this.resetData();
//console.log('====', Permit.canAccess(this.data.user, 'project'))
},
injectEntity() {
return Project
},
onTabsChange(tabVal) {
console.log(tabVal.detail.value)
},
addProject() {
wx.redirectTo({
url: '/pages/project/new/firstStep/firstStep',
})
},
selectWorkflow(e) {
console.log(e)
this.setData({
"conditions.selectedWorkflows": e.detail.value
})
},
selectCity(e) {
console.log(e)
this.setData({
"conditions.selectedCities": e.detail.value
})
},
selectUser(e) {
console.log(e)
this.setData({
"conditions.selectedUsers": e.detail.value
})
},
inputKeyword(e) {
this.setData({
'conditions.keyword': e.detail.value
})
},
clearKeyword(e) {
this.setData({
'conditions.keyword': null
})
},
onAction(e) {
this.setData({ selectedRecord: this.pickRecord(e.currentTarget.dataset.id) })
let menuItems = [
// {label: '编辑', action: 'edit'},
{ label: '删除', action: 'delete' }
];
ActionSheet.show({
theme: ActionSheetTheme.List,
selector: '#t-action-sheet',
context: this,
items: menuItems,
});
},
handleAction(e) {
switch (e.detail.selected.action) {
case 'edit':
this.edit()
break;
case 'delete':
this.delete()
break;
}
},
delete() {
console.log(this.data.selectedRecord.id)
},
edit() {
},
confirmSelectWorkflow() {
this.resetData()
},
confirmSelectCity() {
this.resetData()
},
confirmSelectUser() {
this.resetData()
}
})
これらの他のインポートされた js ファイル: (これらはすべて定義されており、直接使用できます!)
この miniprogram_npm フォルダー内のすべてのコードは、tdesign テンプレートに含まれています。詳細については、この記事を参照してください。
WeChat ミニ プログラム プロジェクト開発 Day1 [プロジェクト構築]_Suxin Ruyueya のブログ - CSDN ブログ
jsコードをアップロードしました
[無料] WeChat ミニ プログラム用の共通 JS コード リソース - CSDN ライブラリ
百度ネットディスク:
リンク: https://pan.baidu.com/s/1nN2ZlQsYqqL7Ibk2KzshIg?pwd=fhv4
抽出コード: fhv4
onAction(e)メソッドに戻ります
呼び出しロジックは以下の矢印に示すとおりです。
最後の呼び出しは handleAction(e) です
このIDはどこから来たのでしょうか? フロントエンドで自分で定義する必要があり、直接行うことはできません。
カスタム属性はdata-で始まり、その後にカスタム名が続きます。ここでは、id を書きます: data-id
値を取得するときは、
このビュー ラベルをクリックしてonAction(e)をバインドします
ID 値はパラメータ e にあります
this.setData({ selectedRecord: this.pickRecord(e.currentTarget.dataset.id) })
setData から selectRecord は、次のようにコンソールに出力できます。
selectRecord は page-list.js で定義されており、これをインポートすることはコードを現在のページに直接コピーすることと同じであるため、直接使用できます。
次にdeleteメソッドを実装します。
Springboot バックエンド削除コントローラーが書き込まれています
ここで重要なポイントを確認して、
onAction(e) { this.setData({ selectedRecord: this.pickRecord(e.currentTarget.dataset.id) }) console.log("当前selectedRecord的id值:" + this.data.selectedRecord.id) let menuItems = [ // {label: '编辑', action: 'edit'}, { label: '删除', action: 'delete' } ]; ActionSheet.show({ theme: ActionSheetTheme.List, selector: '#t-action-sheet', context: this, items: menuItems, }); }, handleAction(e) { switch (e.detail.selected.action) { case 'edit': this.edit() break; case 'delete': this.delete() break; } }, delete() { console.log(this.data.selectedRecord.id) Project.delete(this.data.selectedRecord.id).then((res) => { console.log(res) if (res.data.code == 200) { this.resetData(); } }) },
削除コードは次のとおりです。
delete() { console.log(this.data.selectedRecord.id) Project.delete(this.data.selectedRecord.id).then((res) => { console.log(res) if (res.data.code == 200) { this.resetData(); } }) },
成功するには: